之前(而不是最近)已经问过这个问题,并且没有明确的答案。
使用Socket.io,在需要添加另一台服务器之前,是否可以维护一个并发连接的最大数量?
有谁知道大规模使用websockets(尤其是socket.io)的活跃生产环境吗?我真的很想知道哪种设置最适合最大连接数?
因为Websocket是基于TCP构建的,所以我的理解是,除非端口在连接之间共享,否则您将受到64K端口限制的约束。但是我也看到了使用Gretty进行512K连接的报告。所以我不知道
之前(而不是最近)已经问过这个问题,并且没有明确的答案。
使用Socket.io,在需要添加另一台服务器之前,是否可以维护一个并发连接的最大数量?
有谁知道大规模使用websockets(尤其是socket.io)的活跃生产环境吗?我真的很想知道哪种设置最适合最大连接数?
因为Websocket是基于TCP构建的,所以我的理解是,除非端口在连接之间共享,否则您将受到64K端口限制的约束。但是我也看到了使用Gretty进行512K连接的报告。所以我不知道
Answers:
本文可能会一直为您提供帮助:http : //drewww.github.io/socket.io-benchmarking/
我想知道同样的问题,所以最终写了一个小测试(使用XHR轮询)来查看连接何时开始失败(或落后)。我发现(以我为例)套接字在大约1400-1800个并发连接处开始工作。
这是我做的简短要点,类似于我使用的测试:https : //gist.github.com/jmyrland/5535279
我尝试在AWS上使用socket.io,最多可以保持约600个连接稳定。
我发现这是因为socket.io首先使用了长轮询,然后又升级到了websocket。
将配置设置为仅使用websocket之后,我可以保持大约9000个连接。
在客户端设置此配置:
const socket = require('socket.io-client')
const conn = socket(host, { upgrade: false, transports: ['websocket'] })
这个家伙似乎已经成功地在单个Node.js服务器上建立了超过一百万个并发连接。
http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/
我不清楚他到底使用了多少个端口。
对于+ 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
有关更多信息,请参阅https://www.linangran.com/?p=547