Xmpp与Websocket

Kha*_*aga 61 java xmpp real-time near-real-time websocket

我即将开发一个近乎实时聊天的网站.我知道它可以使用xmpp或websocket协议实现.我也知道xmpp协议是在1999年开发的,我想它现在应该是成熟的.另一方面,websocket协议已于2011年开发.

  1. 如果xmpp在处理实时对话方面表现良好,那对websocket的需求是什么?
  2. 两种协议之间的主要区别是什么?
  3. 我何时应该选择其中一个而不是另一个?

Kev*_*Kev 107

简短的回答是'两者'.

XMPP是一组用于进行实时聊天的应用程序协议(以及许多其他事情) - 然后它必须以某种方式通过网络传输,因此您需要传输绑定.XMPP有三种主要的传输绑定 -

  1. TCP/IP,这是人们通常在Internet上使用设备上的本机客户端
  2. HTTP(称为BOSH),这是传统上在浏览器中使用XMPP时使用的(因为浏览器中的Javascript应用程序无法使用TCP-IP)
  3. Websockets,是在现代浏览器中执行XMPP时使用的.

因此,如果您在浏览器中开发聊天应用程序,则选择XMPP作为应用程序协议,并使用websockets(在现代浏览器中)或BOSH(在旧浏览器中)作为网络传输.如果您使用像Stanza.io(https://github.com/otalk/stanza.io)这样的Javascript的XMPP库,那么它将支持两者,您只需考虑'XMPP'而不是传输层,除了在设置时,你必须告诉它连接到哪个端点.

(您不能使用'just websockets'进行聊天 - 您可以使用没有XMPP的websockets,但这实际上意味着您正在发明自己的应用程序层协议进行聊天,并且您可能会节省多少钱通过利用已经用于创建具有有用属性(安全性,身份,可扩展性等)的工作的大量时间和麻烦,并通过转换XMPP为现有的库和服务器.)

  • Kev 的回答很好,但可能值得指出 1>TCP 属于第 4 层 - 传输层,而 HTTP 和 Websocket 都属于第 7 层 - 应用程序层。 (3认同)

Kum*_*ait 11

基本上,您将两种不同的东西相互比较.XMPP是一种应用程序协议,而WebSockets是一种传输协议.

我认为使用XMPP会为您节省大量时间.但是,您将失去以最适合您的方式实现功能的自由.如果您的应用程序仅使用一对一的消息传递和好友列表功能,而且未来将会添加明确的计划,那么WebSockets +将是一个可行的解决方案.另一方面,如果您的应用程序将受益于其他XMPP扩展(例如多方消息传递和点对点媒体会话),那么使用XMPP会更好,因为这样的功能需要花费大量时间来实现.

  • 我认为你将失去一些自由,因为你将使用一些客户端和服务器库来使用XMPP.我同意XMPP的某些部分可以以不同的方式实现,这使得您失去的自由度取决于您对正在使用的XMPP实现的内部工作的理解. (2认同)