html5 – HTML WebSockets是否为每个客户端维护一个开放的连接?这是规模吗?

我很好奇,如果有人有任何有关HTML WebSockets的可扩展性的信息。对于我已经阅读的一切,似乎每个客户端将保持与服务器的开放式通信线路。我只是想知道如何缩放和多少打开WebSocket连接服务器可以处理。也许离开那些连接打开在现实中不是一个问题,但它感觉就像是。

解决方法

在大多数情况下,WebSockets可能比AJAX / HTML请求更好。但是,这并不意味着WebSockets是所有使用AJAX / HTML的替代品。

每个TCP连接本身在服务器资源方面消耗非常少。通常设置连接可能很昂贵,但是保持空闲连接几乎是免费的。通常遇到的第一个限制是可以同时打开的文件描述符(套接字消耗文件描述符)的最大数量。这通常认为1024,但可以很容易地配置更高。

曾经尝试过配置一个Web服务器来支持数万个同时发生的AJAX客户端?将这些客户端更改为WebSockets客户端,这可能是可行的。

HTTP连接,虽然他们不创建打开的文件或消耗端口号很长一段时间,是更昂贵的几乎所有其他方式:

>每个HTTP连接都带有很多行李,大多数时间没有使用:Cookie,内容类型,用户名长度,用户代理,服务器ID,日期,最后修改等等。一旦建立了WebSockets连接,应用程序所需的数据需要来回发送。
>通常,HTTP服务器配置为记录占用磁盘和cpu间的每个HTTP请求的开始和完成。它将成为记录WebSockets数据的开始和完成的标准,但是当WebSockets连接进行双工传输时,将不会有任何额外的日志开销(除非应用程序/服务,如果它被设计为这样做)。
>通常,使用AJAX的交互式应用程序连续轮询或使用某种长轮询机制。 WebSockets是一个更清洁(和更低的资源)的方式做一个更多的事件的模型,当服务器和客户端有通知时,通过现有的连接报告。
>生产中大多数流行的Web服务器都有一个用于处理HTTP请求的进程(或线程)池。随着压力的增加,池的大小将增加,因为每个进程/线程一次处理一个HTTP请求。每个额外的进程/线程使用更多的内存,并且创建新的进程/线程比创建新的套接字连接(这些进程/线程仍然需要做的)昂贵得多。大多数流行的WebSockets服务器框架是事件的路线,往往规模和表现更好。

WebSockets的主要优点是交互式Web应用程序的延迟连接更低。它将比HTTP AJAX / long-poll(假设应用程序/服务器设计正确)更好地扩展和消耗更少的服务器资源,但IMO较低的延迟是WebSockets的主要优点,因为它将启用不可能的新类Web应用程序与当前的开销和AJAX / long-poll的延迟。

一旦WebSockets标准变得更加完善,并且有更广泛的支持,将它用于大多数需要与服务器频繁通信的新交互式Web应用程序将是有意义的。对于现有的交互式Web应用程序,它将真正取决于当前的AJAX / long-poll模式是如何工作。转换的努力将是不平凡的,所以在许多情况下成本只是不值得的好处。

更新:

有用的链接600k concurrent websocket connections on AWS using Node.js

相关文章

HTML5和CSS3实现3D展示商品信息的代码
利用HTML5中的Canvas绘制笑脸的代码
Html5剪切板功能的实现
如何通过HTML5触摸事件实现移动端简易进度条
Html5移动端获奖无缝滚动动画实现
关于HTML5和CSS3实现机器猫的代码