使用WebSockets ......有效吗?

Ale*_*der 15 javascript networking websocket

我已经阅读了很多我可以在WebSockets上找到的指南和教程,但其中没有一本已经介绍了如何有效地使用它们.

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

Jon*_*nas 26

WebSocket的效率取决于处理它们的Web服务器的实现和体系结构.WebSocket是一种非常有效的协议,只有2字节(!)开销,与每个Ajax请求中发送的所有不同HTTP头字段HTTP cookie相比.

通常,websockets的高效web服务器应该是事件驱动的(参见下面的示例).相反,实现Web服务器的传统方法是每个请求生成一个新线程.但是线程分配了很多内存,例如每个线程256MB.因此,如果服务器上有1GB内存,则无法同时处理很多请求.但是如果你的服务器是事件驱动的,你的内存使用率几乎是不变的,因为没有创建新的线程.另请参见技术上,为什么Erlang中的进程比OS线程更有效?

您可以在WebSockets中发送任何数据.如果客户端是Web浏览器或类型化数组,则JSON是高效的.如果您的客户端是自定义应用程序,则可以使用Protocol Buffers.另请参阅Google Wave客户端 - 服务器协议白皮书

您可以使用Twisted(Python)或Netty(Java)实现高效的websocket服务器.Play Framework是一个高效的Web框架,用于在Netty上实现的Java和Scala.另一种有效的替代方案是Yaws web服务器(Erlang)或Node.js + Socket.io(JavaScript).

作为应用程序开发人员,发送的数据越少,效率越高(流量越少),服务器负载越少.

  • 您能否详细说明线程可能用完 256MB 的情况?这是否与 WebSocket 技术有关? (2认同)
  • 线程内存取决于操作系统和技术。一般来说,64 位字节系统上的 JVM 线程需要 1024k 的内存,而不是 256 MB。线程是一个轻量级进程,而不是整个操作系统。 (2认同)