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

Posted

技术标签:

【中文标题】HTML5 websockets:打开连接的最大数量?【英文标题】:HTML5 websockets: max number of open connections? 【发布时间】:2012-09-10 15:01:04 【问题描述】:

html5 websockets(和have been for some time)是一个热门话题,因为它们优雅地启用了实时 server-side push。

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

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

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

相反,单个浏览会话的最大 websocket 数量是否受浏览器本身的限制?正如blog post 所示,截至 2012 年 4 月,不同的浏览器支持不同数量的 open websocket 连接。 (我个人的目标是每个浏览会话有 1 个打开的 websocket;但这个信息还是很高兴知道的)。

TL/DR:

    每个浏览会话可能的 websocket 数量有什么限制?是客户端吗?服务器?还是两者兼而有之? 相同的限制是否适用于ws:wss: 连接?

【问题讨论】:

我强烈建议每个浏览会话保持一个连接——您最不想担心的就是跨浏览器限制。您的服务器才是真正重要的地方。服务器和防火墙只能处理这么多的并发连接。我已经看到支持套接字的托管服务提供商根据并发连接数定价,如果这能让您了解重要的地方以及应该如何构建应用程序(例如,每个用户的单个连接)。 值得一读。 drewww.github.io/socket.io-benchmarking 【参考方案1】:

在 Gecko 7 中,他们引入了参数 network.websocket.max-connections,您可以在 about:config 中设置它。它根据以下内容“一次”设置最大 websocket 连接数: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API

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

【讨论】:

嗯,似乎没有跨浏览器的方式来设置它。还是有帮助的; +1ed。 在 Chrome 中找不到类似的选项,但这对 Firefox 很有帮助,谢谢! 根据 Mardie 投票率最高的答案中的第一个参考,Chrome 没有在运行时提供这样的设置,@Brade。您必须编译自己的自定义 Chromium 才能更改限制。 我的问题是从用户的角度来看:当我有太多打开的标签页并加载了 TFS Web 界面时,它们都开始表现得很奇怪。在 FF 的 about:config 中设置更大的 network.http.max-persistent-connections-per-server 会有所帮助。【参考方案2】:

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

连接的瓶颈通常在服务器端。 Web-socket 是对 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

【讨论】:

从技术上讲,WebSocket 并不是对 HTTP 的“升级”。它是一种不同的协议,也在 TCP 之上传输。它确实使用 HTTP 进行握手并发送升级标头字段以启动协议切换。 @hacklikecrack 但是,您通过 HTTP 协商它到 HTTP 服务器,它继续作为 HTTP 请求流经所述 HTTP 服务器,特别是与 Connection: Upgrade 作为 HTTP 标头协商。我必须支持@Mardie ;) 您指的“发布/订阅频道”功能是什么?

以上是关于HTML5 websockets:打开连接的最大数量?的主要内容,如果未能解决你的问题,请参考以下文章

openshift 的最大并发 websocket 连接数是多少?

tomcat 7.0支持的最大活动websocket连接数是多少

websocket

Java怎么获取socket当前连接数?

用nginx代理netty实现的websocket做负载均衡,最大连接数取决于谁

WebSocket