XMPP BOSH与COMET的比较

7
我想编写一个实时聊天应用程序,并需要决定使用哪些技术。
这些技术有什么区别,您更喜欢使用哪种技术并为什么?
由于WebSocket还没有完全成熟,因此不是一个选择。
谢谢。
1个回答

28
你应该阅读问题"为什么BOSH不如WebSockets和Long-Polling流行"kanaka给出了一个很棒的答案,我相信它会解决你对WebSockets的担忧。WebSocket是绝对准备好在野外战斗
在我看来,BOSH和Comet是同一回事。BOSH代表“同步HTTP上的双向流”,尽管BOSH规范声明:
引用:

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

我知道至少从2001年起就有Comet服务器存在,因为我曾经为一家公司(Caplin Systems)工作过,他们拥有并仍然拥有一个Comet服务器。
我认为它们在根本上是相同的,因为它们都最初(见下文)依赖于两个HTTP连接。第一个是后台通道,可以是长期持有的HTTP流连接或用于HTTP长轮询。第二个连接是短暂的,用于发送命令,例如订阅请求。这两个连接允许模拟双向通信。
因此,在根本上,BOSH和Comet使用相同的机制进行服务器到客户端和客户端到服务器的通信(客户端可以是Web浏览器或其他支持的Web客户端)。 BOSH的不同之处在于它在协议中提供了更多细节,并且是针对XMPP开发的。任何Comet服务器都可以开发为遵守BOSH规范中定义的标准。
所有这些都说了,Comet和BOSH服务器无疑会提供替代传输机制。这些将包括HTTP流式传输、HTTP长轮询、标准HTTP轮询和WebSockets。
因此,如果您想要BOSH和XMPP提供的详细信息,则可能需要考虑使用专为BOSH和XMPP设计的技术堆栈。如果要发送简单消息,而不是BOSH和XMPP固有负载中的附加负载,或者如果要为自己的协议构建自己的“附加值”,则标记为Comet服务器的东西可能是更好的解决方案。
如果选择使用现有技术堆栈而不是从头开始开发解决方案,则很可能该解决方案将在可能的情况下使用WebSockets,因为它们提供了标准化和高效的双向通信机制。
我已经尝试制作了一个实时Web技术堆栈图表,您可以在下面看到。希望它能有所帮助:

Realtime Web Technology Stack

您可以在此处找到实时技术列表


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