110

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

  1. 如果 xmpp 擅长处理实时对话,那么对 websocket 的需求是什么?
  2. 两种协议之间的主要区别是什么?
  3. 我什么时候应该选择其中一个而不是另一个?
4

1 回答 1

159

简短的回答是“两者”。

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 来代替现有的库和服务器,这会花费大量时间和头痛。)

于 2014-10-25T09:09:07.467 回答