HTML5 websockets:打开连接的最大数量?

HTML5 websockets(并且已经有一段时间了 )是一个热门话题,因为它们优雅地实现了服务器端的 实时 推送 。

我目前有一个由Tomcat 7.0.30 支持的 websocket的工作应用程序,其中包括websocket支持 。 但将其转移到生产环境中会引起问题。

主要我想知道每个浏览会话可能同时运行( 打开 )的最大连接数量; 浏览会话意味着单个浏览器选项卡或窗口。

打开websocket连接是否加起来可以由Web服务器同时处理的最大连接数? 例如Apache中的MaxClients

相反, 浏览器自身限制的单个浏览会话的Web套接字的最大数量是多less? 正如本博文所示,截至2012年4月,不同的浏览器支持不同数量的开放式 websocket连接。 (我个人会瞄准每个浏览会话打开一个WebSocket;但是这个信息仍然是很好的知道)。

TL / DR:

  1. 什么限制了每个浏览会话可能的websockets的数量? 是客户吗? 服务器? 还是两者的结合?
  2. ws:wss:连接是否适用相同的限制?

浏览器没有max-connections默认值的标准规范,取决于实现[0]。 此外,对于相同的应用程序,每个浏览会话使用多个networking套接字似乎过度使用,因为您可以使用pub / sub通道。

连接的瓶颈通常在服务器端。 Web套接字是对HTTP的升级,因此连接是“正好”升级的HTTP(TCP)连接[1] .HTTPS和WSS只向正常连接添加安全层。它们并不是不同的连接[2]。 在你的情况检查maxConnections (和maxThreads )[3]和您的操作系统最大[4] [5]。 如果你的并发连接达到数万,也许你应该开始考虑负载平衡或集群[6]。

[0] https://code.google.com/p/chromium/issues/detail?id=85323

[1] http://en.wikipedia.org/wiki/WebSocket

[2] http://en.wikipedia.org/wiki/HTTP_Secure

[3] http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

[4] https://serverfault.com/questions/10852/what-limits-the-maximum-number-of-connections-on-a-linux-server

[5] https://superuser.com/questions/251596/is-there-a-hard-limit-of-65536-open-tcp-connections-per-ip-address-on-linux

[6] http://tomcat.apache.org/tomcat-7.0-doc/config/cluster.html

关于高并发性的更多信息: http : //www.kegel.com/c10k.html

在Gecko 7中,他们引入了可以在about:config设置的aprameter network.websocket.max-connections 。 它是一次设置最大的websocket连接: https : //developer.mozilla.org/en-US/docs/Web/API/WebSockets_API

我不知道你是否可以从代码中确定这个数字,以及是否有任何方法来确定在其他会话中打开了多less个(所以你剩下多less)。