WebSockets 与长轮询与 TCP 可扩展性/易用性

Posted

技术标签:

【中文标题】WebSockets 与长轮询与 TCP 可扩展性/易用性【英文标题】:WebSockets versus Long-Polling versus TCP Scalability/Ease of Use 【发布时间】:2011-03-22 20:50:25 【问题描述】:

我正在为基于 Java 的移动 Web 应用程序编写后端,我想知道就可扩展性和易用性而言,使用 WebSockets 与 Comet 等长轮询解决方案的优缺点是什么。另一种选择也是使用 TCP 实现我自己的解决方案。根据我的阅读,您似乎需要在专用服务器上运行长轮询解决方案,因为当您开始与大量用户打交道时,它们在 Tomcat/Jetty 中运行不佳。 WebSockets 听起来可以更好地扩展。在 Comet 上使用 Websockets 是否有任何缺点,或者我应该使用 TCP 连接使用我自己的解决方案吗?我正在寻找使用最少流量的选项。

【问题讨论】:

【参考方案1】:

我想这取决于你的用例和学习新事物的容忍度,但可以肯定的是,使用 WebSocket API 进行通信甚至 SSE 会比传统的长轮询/彗星解决方案更好,原因有很多- 你提到的一个 - 可扩展性,但也适用于带宽利用率和延迟。同样重要的是要了解 WebSocket 之于 Web 就像 TCP 之于桌面,例如一个插座。在桌面解决方案中,您不必针对 TCP 进行编码,您可以使用支持传输协议(如 STOMP 或 XMPP over TCP)的客户端库。使用 WebSocket 时也这样做,选择一个服务器进行通信,例如XMPP 服务器和一个 XMPP 客户端库,用于通过 WebSockets 与服务器通信。

您可以查看我们的示例here,我们有docs you can read here。

需要注意的是浏览器对 html5 WebSocket 的采用——目前在 Chrome 和 Safari 中,很快将在 FF 和 Opera 中推出。我们已经解决了这个问题,但如果您计划构建自己的服务器,则必须为旧版浏览器创建一个备用解决方案。

【讨论】:

这个问题中的外部引用现在是死链接。

以上是关于WebSockets 与长轮询与 TCP 可扩展性/易用性的主要内容,如果未能解决你的问题,请参考以下文章

扩展聊天应用程序 - 短轮询与长轮询(AJAX、PHP)

轮询与长轮询[关闭]

轮询与长轮询

轮询与长轮询

ajax轮询与长轮询

Tornado-长轮询_webSocket