XMPP BOSH与COMET

时间:2011-09-06 23:01:38

标签: xmpp comet bosh

我想编写一个实时聊天应用程序,并且需要决定使用哪种技术。

这些技术之间有什么区别,您更喜欢哪种?为什么?

WebSockets不是一个选项,因为它还没准备好在野外战斗

由于

1 个答案:

答案 0 :(得分:28)

您应该阅读问题"Why isn't BOSH more popular especially as an alternative to WebSockets and Long-Polling"kanaka给出了一个很棒的答案,我相信它会解决你对WebSockets的担忧。 WebSocket 绝对“准备在野外战斗”。

在我看来,BOSH和Comet是一回事。 BOSH代表“同步HTTP上的双向流”,尽管BOSH specification状态:

  

BOSH,本规范中定义的技术,实质上是为长期双向TCP连接提供“插入式”替代方案。它是一种成熟的,功能齐全的技术,自2004年以来已被广泛实施和部署。据我们所知,它是许多类似技术中的第一个,现在包括在Bayeux协议中正式化的Comet方法以及Web套接字协议和反向HTTP。

我知道Comet服务器自2001年以来一直存在这个事实,因为我曾在一家公司(Caplin Systems)工作过,而该公司曾经有过Comet服务器。

我之所以说它们在基本层面是相同的,是因为它们最初(见下文)依赖于两个HTTP连接。第一个是反向通道,它是长期持有的HTTP流式连接或用于HTTP长轮询。第二个连接是短暂的,用于发送订阅请求等命令。这两个连接允许模拟双向通信。

因此,在基本层面上,BOSH和Comet使用相同的服务器到客户端和客户端到服务器通信的机制(客户端是Web浏览器或其他支持的Web客户端)。 BOSH与众不同之处在于它在协议中提供了更多细节,并在开发时考虑了XMPP。可以开发任何Comet服务器以符合BOSH规范中定义的标准。

所有这些说明,Comet和BOSH服务器无疑将提供替代传输机制。这些将包括HTTP Streaming,HTTP Long-Polling,标准HTTP-Polling WebSockets。

因此,如果您想要BOSH和XMPP提供的详细信息,那么您可能需要考虑使用BOSH和XMPP构建的技术堆栈。如果你想发送简单的消息,没有BOSH和XMPP中固有的额外有效负载,或者如果你想为自己的协议构建自己的“附加值”,那么标记为Comet服务器的东西可能是更好的解决方案。

如果您选择使用现有的技术堆栈,而不是从头开发解决方案,那么解决方案很可能会使用WebSockets,因为它们提供了标准化且高效的双向通信机制。

我第一次尝试实时网络技术堆栈图,您可以在下面看到。希望它有所帮助:

Realtime Web Technology Stack

您可以找到list of realtime technologies here