Xmpp与Websocket

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

  1. 如果xmpp能够处理实时对话,那么websocket需要什么?
  2. 这两种协议的主要区别是什么?
  3. 而我应该什么时候select其中的一个呢?

简短的答案是“两个”。

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

  1. TCP / IP,这是通常在互联网上使用设备上的本机客户端
  2. HTTP(称为BOSH),这是在浏览器中使用XMPP时传统上使用的(因为浏览器中的JavaScript应用程序不能使用TCP-IP)
  3. Websockets是在现代浏览器中使用XMPP时使用的。

因此,如果您正在浏览器中开发聊天应用程序,则应selectXMPP作为应用程序协议,并使用websockets(在现代浏览器中)或BOSH(在较旧的浏览器中)作为networking传输。 如果您使用像Stanza.io( https://github.com/otalk/stanza.io )这样的JavaScript的XMPP库,它将支持两者,而您只会考虑“XMPP”而不是传输层,除了在设置时,你必须告诉它什么端点连接。

(你不能使用'只有websocket'进行聊天 – 你可以使用没有XMPP的websockets,但是这实际上意味着你正在创build自己的聊天应用层协议,而且你可能会保存通过利用已经写入的具有有用属性(安全性,身份,可扩展性等)的工作,并通过使用XMPP来替代现有的库和服务器,而花费了大量时间和头痛。)

基本上,你是比较两个不同的东西彼此。 XMPP是一个应用程序协议,而WebSockets是一个传输协议。

我认为使用XMPP将为您节省大量的时间。 但是,您将失去按照最适合您的方式实现function的自由。 如果您的应用程序只使用一对一的消息传递和朋友列表function,而没有明确的计划将来添加什么,WebSockets +将是一个可行的解决scheme。 另一方面,如果您的应用程序将受益于其他XMPP扩展(如多方消息传递和对等媒体会话),则最好使用XMPP,因为这样的function将需要大量的时间才能实现。