Xmpp和Websocket的区别

114

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

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

1
我最近遇到了同样的问题,我的解决方案是选择WebSockets。Node.JS正在变得非常流行,而且理应如此。XMPP还好,但在我看来,如果你决定选择这种较旧的技术,你将限制自己的未来发展。然而,Node是一个棘手的东西,你必须以不同于JavaScript的方式来处理它。如果你足够耐心,我建议选择Node,不仅仅是为了这个问题,而且它将使你在其他领域更容易扩展。 - JustSteveKing
7
XMPP是一种可扩展的即时消息和在线状态协议,Websocket则是一种通过80端口提供全双工通讯的协议。你正在把苹果和橙子进行比较。 - Flow
21
@Flow:在你看来,我可能是在比较不相干的事物。但我的问题是,在开发一个能够提供实时聊天功能的网站时,我应该选择哪一个? - Khafaga
1
@JustSteveKing 大多数事情在 XMPP 中已经完成,但是你必须在 node.js 中管理这些事情。这等于再次重新发明轮子。 - Shahid Karimi
1个回答

164
简短回答是“两者兼备”。
XMPP是一组应用协议,用于实时聊天(以及许多其他事情),然后必须以某种方式通过网络传输,因此需要一个传输绑定。对于XMPP,有三种主要的传输绑定:
1. TCP / IP通常用于设备上的本机客户端。 2. HTTP(称为BOSH)通常用于在浏览器中使用XMPP(因为JavaScript应用程序无法使用TCP-IP)。 3. Websockets适用于在现代浏览器中进行XMPP。
因此,如果您正在浏览器中开发聊天应用程序,则应选择XMPP作为应用程序协议,并使用Websockets(在现代浏览器中)或BOSH(在旧版浏览器中)作为网络传输。如果您使用类似Stanza.io的JavaScript XMPP库(https://github.com/otalk/stanza.io),它将同时支持这两种传输绑定,并且您只需考虑“XMPP”,而不必考虑传输层,除非在设置时必须告诉它连接到的端点是什么。
(您不能仅使用Websockets进行聊天 - 您可以在没有XMPP的情况下使用Websockets,但这实际上意味着您正在为聊天发明自己的应用程序层协议,并且很可能会通过使用XMPP而利用已经编写了具有有用属性(安全性,身份,可扩展性等)以及已存在的库和服务器来节省大量时间和麻烦。)

1
抱歉,问题已经有一段时间了,我想知道的是,这是否意味着传输绑定类似于socket.io/strophe.js,而XMPP类似于(openfire/Ejabbered)? - John
1
不是,你提到的是库和服务器。 - Kev
以下是关于层(包括传输层、应用层)的更多信息:https://zh.wikipedia.org/wiki/OSI模型 - Karina Klinkevičiūtė
3
Kev的回答很好,但值得指出的是TCP属于第四层传输层,而HTTP和Websocket都属于第七层应用层。 - RoundPi
1
你不会在XMPP之上使用Websockets,而是在Websockets之上使用XMPP。虽然Websockets可能是OSI模型中的应用层协议,但当你谈论在Websockets之上分层更多协议时,这并没有特别有帮助。当与XMPP一起使用时,将Websockets视为XMPP的网络传输更容易理解。 - Kev
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接