我已经阅读了很多我可以在WebSockets上找到的指南和教程,但其中没有一本已经介绍了如何有效地使用它们。
有没有人有关于如何做到这一点的任何指导?我担心单个连接可能占用的带宽量,特别是当应用程序打开了连接的趋势时。
答案 0 :(得分:26)
WebSocket的效率取决于处理它们的Web服务器的实现和体系结构。 WebSocket是一种非常有效的协议,只有2字节(!)开销,与每个Ajax请求中发送的所有不同HTTP header fields和HTTP cookies进行比较。
通常,websockets的高效web服务器应该是事件驱动的(参见下面的示例)。相反,实现Web服务器的传统方法是每个请求生成一个新线程。但是线程会分配很多内存每个线程256MB。因此,如果服务器上有1GB内存,则无法同时处理很多请求。但是如果你的服务器是事件驱动的,你的内存使用率几乎是不变的,因为没有创建新的线程。另请参阅Technically why is processes in Erlang more efficient than OS threads?
您可以在WebSockets中发送任何数据。如果客户端是Web浏览器,或者typed arrays,则JSON非常有效。如果您的客户是自定义应用程序,则可以使用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)。
作为应用程序开发人员,发送的数据越少,效率越高(流量越少),服务器负载越少。