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

这些技术之间有什么区别?您偏爱哪种?为什么?

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

谢谢

最佳答案

您应该阅读问题"Why isn't BOSH more popular especially as an alternative to WebSockets and Long-Polling"kanaka提供了一个绝妙的答案,我敢肯定,它将解决您对WebSockets的关注。 WebSocket的绝对是“准备在野外战斗”。

我认为,BOSH和Comet是同一回事。 BOSH代表“同步HTTP上的双向流”,尽管BOSH specification指出:



我知道,Comet服务器至少是从2001年就存在的,因为我在一家拥有(并且仍然拥有)Comet服务器的公司(Caplin Systems)工作。

我说它们在根本上是同一件事的原因是,它们两者最初(请参阅下文)都依赖于两个HTTP连接。第一个是反向 channel ,它是长期的HTTP流连接或用于HTTP长轮询。第二个连接是短暂的,用于发送命令,例如订阅请求。这两个连接允许模拟双向通信。

因此,从根本上说,BOSH和Comet使用相同的机制进行服务器到客户端以及客户端到服务器的通信(客户端是Web浏览器或其他受支持的Web客户端)。 BOSH与众不同之处在于,它在协议(protocol)中提供了更多细节,并且是在考虑XMPP的情况下开发的。可以开发任何Comet服务器以遵守BOSH规范中定义的标准。

综上所述,Comet和BOSH服务器无疑将提供替代的传输机制。这些将包括HTTP流,HTTP长轮询,标准HTTP轮询 WebSockets。

因此,如果您想要由BOSH和XMPP提供的详细信息,那么您可能要考虑考虑到BOSH和XMPP构建的技术堆栈。如果您要发送简单的消息,而没有BOSH和XMPP固有的增加的有效载荷,或者您想为自己的协议(protocol)建立自己的“增值”,那么标记为Comet服务器的服务器可能是一个更好的解决方案。

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

我已经尝试了一个实时Web技术堆栈图,您可以在下面看到它。希望它会有所帮助:

您可以找到list of realtime technologies here

10-06 02:32