如何高效使用WebSockets?

15

我已经阅读了几乎所有有关WebSockets的指南和教程,但没有一个涵盖如何高效使用它们。

是否有人有任何关于如何做到这一点的指南?我担心单个连接占用的带宽数量,特别是当应用程序打开了数百个连接时。


1
可能吧,但稍微优化一下也无妨,特别是在网络延迟对应用程序影响巨大的情况下。 - Alexander
2
所以你想要为Websockets提供QoS...或者确切地说呢?它们的全局最大值?你是担心客户端还是服务器? - jcolebrand
1
@Alexander:效率取决于服务器的架构,例如线程。作为应用程序开发人员,您只需尽可能发送最少量的数据。 - Jonas
1
@Alexander 使用Bison - Raynos
1
@Alexander:你正在使用的Node.js非常高效。 - Jonas
显示剩余7条评论
1个回答

27
WebSocket的效率取决于处理它们的Web服务器的实现和架构。与每个Ajax请求中发送的所有不同HTTP头字段HTTP cookie相比,WebSocket是一个非常高效的协议,仅有2字节(!)的开销。
通常,用于WebSocket的高效Web服务器应该是事件驱动的(请参见下面的示例)。相反,传统的Web服务器实现方式是为每个请求生成一个新线程。但线程会分配大量内存,例如每个线程256MB。因此,如果您的服务器上有1GB内存,则无法同时处理很多请求。但如果您的服务器是事件驱动的,则内存使用量几乎恒定,因为不会创建新线程。另请参见Technically why is processes in Erlang more efficient than OS threads? 您可以在WebSocket中发送任何数据。如果客户端是Web浏览器,则JSON很有效,或者可能是typed arrays。如果您的客户端是自定义应用程序,则可以使用Protocol Buffers。另请参见Google Wave Client-Server Protocol Whitepaper
你可以使用Twisted(Python)或Netty(Java)来实现高效的websocket服务器。Play Framework是一个在Netty上实现的Java和Scala高效的Web框架。另一个高效的选择是Yaws web服务器(Erlang)或Node.js + Socket.io(JavaScript)。
作为应用程序开发人员,发送的数据越少,效率越高(流量越小),服务器负载越少。

2
线程内存取决于操作系统和技术。通常情况下,对于64位字节系统上JVM的线程而言,它拥有1024k的内存,而不是256MB。线程是轻量级进程,而不是整个操作系统。 - user3000951
2
你能详细说明一下线程在什么情况下可能会使用256MB吗?这与WebSocket技术有关吗? - Harry Johnston

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