我想编写一个实时聊天应用程序,并且需要决定使用哪种技术。
这些技术之间有什么区别?您偏爱哪种?为什么?
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。