168

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

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

有谁知道任何大规模使用 websockets(尤其是 socket.io)的活跃生产环境?我真的很想知道哪种设置最适合最大连接?

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

4

5 回答 5

99

本文可能会对您有所帮助:http: //drewww.github.io/socket.io-benchmarking/

我想知道同样的问题,所以我最终编写了一个小测试(使用 XHR 轮询)来查看连接何时开始失败(或落后)。我发现(就我而言)套接字在大约 1400-1800 个并发连接时开始起作用。

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

于 2013-05-07T19:19:34.017 回答
39

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

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

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

在客户端设置此配置:

const socket = require('socket.io-client')
const conn = socket(host, { upgrade: false, transports: ['websocket'] })
于 2019-03-14T07:31:34.393 回答
17

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

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

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

于 2014-10-24T16:52:05.733 回答
17

在继续之前,请阅读此答案的评论

问题询问 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

最后,增加 TCP 缓冲区/etc/sysctl.conf

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

有关更多信息,请参阅

于 2019-11-20T08:08:55.393 回答
2

配置完成后,可以在终端上写这个命令查看

sysctl -a | grep file
于 2020-08-14T11:22:15.093 回答