Xmpp与Websocket [关闭]


88

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

  1. 如果xmpp能够很好地处理实时对话,那么对websocket的需求是什么?
  2. 两种协议之间的主要区别是什么?
  3. 我何时应该选择其中一个呢?

1
我最近偶然发现了同一问题,我的答案是选择WebSockets。Node.JS逐渐成为一种非常流行的语言,按其应有的权利。XMPP可以-但是我认为您决定采用这种较旧的技术会限制自己的前进。但是,Node是一个棘手的野兽,您必须采用与JavaScript不同的方法来处理它。如果您有足够的耐心,我建议您使用Node-不仅限于此,它还可以使您更轻松地扩展其他领域。
JustSteveKing 2014年

7
XMPP是一种可扩展的消息和状态协议,Websocket是一种通过80端口提供全双工通信的协议。您将Apple与Oranges进行了比较。
流量

16
@Flow:您认为我可能正在比较苹果和橙子。但是我要问的是,在开发提供实时聊天功能的网站时应该选择哪个。
卡法加2014年

1
@JustSteveKing大多数事情已经在XMPP中完成,但是您必须在node.js中进行管理。这等于重新发明轮子。
沙希德·卡里米

Answers:


133

简短的答案是“两者”。

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

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

因此,如果要在浏览器中开发聊天应用程序,则选择XMPP作为应用程序协议,并使用websocket(在现代浏览器中)或BOSH(在较旧的浏览器中)作为网络传输。如果您使用Stanza.io(https://github.com/otalk/stanza.io)之类的XMPP库来支持Javascript ,则它将同时支持这两种库,并且您只会考虑使用“ XMPP”而不是传输层,除了在安装时,您必须告诉它要连接到哪个端点。

(您不能使用“仅websockets”进行聊天-您可以在不使用XMPP的情况下使用websockets,但这实际上意味着您正在发明自己的应用程序层协议进行聊天,并且很可能节省了通过利用已经编写好的具有有用属性(安全性,身份,可扩展性等)的工作而花费很多时间和头痛,而通过使用XMPP来为已有的库和服务器编写工作。


1
嗨,很抱歉,问题已经存在了一段时间,我只是想知道,这是否意味着传输绑定就像socket.io/strophe.js,而xmpp就像(openfire / Ejabbered)?
约翰

1
不,您要命名的是库与服务器。
凯夫

以下是有关图层(包括传输层和应用程序层)的更多信息:en.wikipedia.org/wiki/OSI_model
KarinaKlinkevičiūtė16年

2
来自Kev的好答案,但可能值得指出1> TCP属于第4层-传输层,而HTTP和Websocket都属于第7层-应用程序层。
Gob00st

确实@ Gob00st-我在这里也感到困惑。凯夫(Kev)的回答“都是”,因为“您将使用websockets(在现代浏览器中)……作为网络传输。但是,我们如何通过WebSocket(作为XMPP和HTTP)实际上是OSI第七层中的应用程序协议(而不是传输协议)来协调这一点?XMPP为什么要在现代浏览器中“位于” WebSocket之上?
Amelio Vazquez-Reina
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.