最大并发 Socket.IO 连接

这个问题以前曾被问过,但最近没有,也没有明确的答案。

使用 Socket.io,在您需要添加另一个服务器之前,是否存在可以维护的最大并发连接数?

是否有人知道任何活跃的生产环境正在大规模地使用 websockets (特别是 socket.io) ?我真的很想知道什么样的设置是最好的最大连接?

因为 Websockets 是在 TCP 之上构建的,我的理解是,除非连接之间共享端口,否则您将受到64K 端口限制的约束。但我也看过 512K 连接使用格雷蒂的报告。所以我不知道。

159011 次浏览

这篇文章可能对你有所帮助: http://drewww.github.io/socket.io-benchmarking/

我也想知道同样的问题,所以我最终编写了一个小测试(使用 XHR 轮询)来查看连接开始失败(或落后)的时间。我发现(在我的例子中)套接字在大约1400-1800个并发连接处开始运行。

这是我做的一个简短的要点,类似于我使用的测试: https://gist.github.com/jmyrland/5535279

这家伙似乎已经成功地在一台 Node.js 服务器上拥有超过100万个并发连接。

Http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/

但我不清楚他到底用了多少端口。

我尝试在 AWS 上使用 socket.io,我最多可以保持大约600个连接的稳定。

我发现这是因为 socket.io 首先使用了长轮询,然后升级到了 websocket。

在我将配置设置为只使用 websocket 之后,我可以保持大约9000个连接。

在客户端设置此配置:

const socket = require('socket.io-client')
const conn = socket(host, { upgrade: false, transports: ['websocket'] })

在进一步讨论之前,先回顾一下这个答案的评论

问到 socket.io 套接字时,答案是本机的 这些更改是危险的,因为它们适用于 系统,而不仅仅是 Socket.io 套接字。此外,今天的网络是 永远不会成为 Socket.io 的瓶颈 在没有首先理解其含义的情况下。

对于 + 300k 并发连接:

/etc/sysctl.conf中设置这些变量:

fs.file-max = 10000000
fs.nr_open = 10000000

同时,在 /etc/security/limits.conf中改变这些变量:

* soft nofile 10000000
* hard nofile 10000000
root soft nofile 10000000
root hard nofile 10000000

最后,在 /etc/sysctl.conf中也增加 TCP 缓冲区:

net.ipv4.tcp_mem = 786432 1697152 1945728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216

详情请参阅 这个

在进行配置之后,您可以通过在终端上编写这个命令来进行检查

sysctl -a | grep file