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

标签 java websocket long-polling

我正在为基于 Java 的移动网络应用程序编写后端,我想知道就可伸缩性和易用性而言,使用 WebSockets 与像 comet 这样的长轮询解决方案有什么优缺点。另一种选择也是使用 TCP 实现我自己的解决方案。从我读到的内容来看,您似乎需要在专用服务器上运行长轮询解决方案,因为当您开始与大量用户打交道时,它们在 Tomcat/Jetty 中运行不佳。 WebSockets 听起来它的扩展性更好。使用 Websockets 而不是 Comet 有什么缺点,还是我应该使用 TCP 连接求助于我自己的解决方案?我正在寻找使用最少流量的选项。

最佳答案

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

你可以看看我们的例子吧here我们有docs you can read here .

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

关于java - WebSockets 与长轮询与 TCP 可扩展性/易用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365219/

相关文章:

java - 是什么导致任意 JTree 节点错误地显示它们的名称,我该如何阻止它发生?

java - Eclipse中的serialVersionUID生成是否使用serialver?

python - Websocket/event-source/... 实现将双向 RPC 暴露给 python/django 应用程序

asp.net - Signalr中哪种WebSocket或Long Polling更好?

ajax,长轮询和管理两分钟重试

java - 将 jar 转换为可执行文件的命令行工具?

java - 如何使用 Java 程序加载/卸载 Linux 内核模块?

Azure Web 应用服务支持 Python websocket?

flutter - socket_io_client 用于套接字连接多次触发

ruby - 使用 thin 进行长轮询连接