【问题标题】:Xmpp Vs Websocket [closed]Xmpp 与 Websocket [关闭]
【发布时间】:2014-12-20 08:32:39
【问题描述】:

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

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

【问题讨论】:

  • 我最近偶然发现了同样的问题,我的答案是使用 WebSockets。 Node.JS 正在成为一种非常流行的语言,按理说它应该是。 XMPP 没问题 - 但是在我看来,您决定采用这种较旧的技术是在限制自己前进。然而,Node 是一个棘手的野兽,你必须以不同于 JavaScript 的方式来处理它。如果您有足够的耐心,我建议您使用 Node - 不仅仅是为了这个,它还可以让您更轻松地在其他领域进行扩展。
  • XMPP 是一种可扩展的消息传递和状态协议,Websocket 是一种通过端口 80 提供全双工通信的协议。您将 Apple 与 Orange 进行比较。
  • @Flow:在你看来,我可能会将苹果与橙子进行比较。但我要问的是,在开发提供实时聊天功能的网站时应该选择哪个。
  • @JustSteveKing 大多数事情已经在 XMPP 中完成,但是您必须在 node.js 中管理这些事情。这等于重新发明轮子。

标签: java websocket xmpp real-time near-real-time


【解决方案1】:

简短的回答是“两者”。

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”而不是传输层,而不是在设置时你必须告诉它要连接到哪个端点。

(您不能使用“仅 websockets”进行聊天 - 您可以在没有 XMPP 的情况下使用 websockets,但这真正意味着您正在为聊天发明自己的应用层协议,而且您很可能是通过利用已经编写的具有有用属性(安全性、身份、可扩展性等)的工作,并且通过使用 XMPP 来替代现有的库和服务器,将节省大量时间和头痛。)

【讨论】:

  • 嗨,抱歉,问题已经有一段时间了,我只是想知道,这是否意味着传输绑定就像 socket.io/strophe.js,而 xmpp 就像(openfire/Ejabbered)?
  • 不,你所说的是库与服务器。
  • 这里有更多关于层(包括传输层、应用层)的信息:en.wikipedia.org/wiki/OSI_model
  • Kev 的好回答,但值得指出 1>TCP 属于第 4 层 - 传输层,而 HTTP 和 Websocket 都属于第 7 层 - 应用层。
  • 确实@Gob00st - 我在这里也很困惑。 Kev 的这个回答说“两者”,因为 “你会使用 websockets(在现代浏览器中)......作为 网络传输。但是,我们如何协调 WebSocket(作为 XMPP 和 HTTP)实际上是 OSI 第 7 层中的 应用程序不是传输)协议这一事实?为什么 XMPP 会在现代浏览器中“建立在”WebSockets 之上?
猜你喜欢
  • 2013-05-13
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 2019-10-28
  • 1970-01-01
  • 2011-10-31
  • 2015-08-17
相关资源
最近更新 更多