这个问题以前有人问过,但最近没有,也没有一个明确的答案。
使用套接字。那么,在您需要添加另一个服务器之前,是否存在可以维持的最大并发连接数?
有谁知道大规模使用websockets(特别是socket.io)的生产环境吗?我真的很想知道什么样的设置对最大连接是最好的?
因为Websockets是建立在TCP之上的,我的理解是,除非端口在连接之间共享,否则你将受到64K端口限制的约束。但我也看到过使用Gretty连接512K的报告。所以我不知道。
这篇文章可能对您有所帮助:http://drewww.github.io/socket.io-benchmarking/
我想知道同样的问题,所以我最终编写了一个小测试(使用xhr轮询)来查看连接何时开始失败(或落后)。我发现(在我的情况下)套接字在1400-1800并发连接时开始起作用。
这是我做的一个简短的要点,类似于我使用的测试:https://gist.github.com/jmyrland/5535279尝试使用套接字。在AWS上,我最多可以保持大约600个稳定的连接。
我发现这是因为插座。IO首先使用长轮询,然后升级到websocket。
在我将配置设置为只使用websocket之后,我可以保持大约9000个连接。
在客户端设置这个配置:
const socket = require('socket.io-client')
const conn = socket(host, { upgrade: false, transports: ['websocket'] })
在继续之前先看一下这个答案的注释
关于套接字的问题。IO套接字,答案是本机套接字。这些变化是危险的,因为它们适用于所有的东西系统,不只是插座。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
这个家伙似乎已经成功地在单个Node.js服务器上拥有超过100万个并发连接。
http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/我不清楚他到底使用了多少端口。
我想在2023年提供另一个答案。
我们只在socket.io-client中使用websocket。我们做了两种类型的性能测试,
-
我的测试团队使用JMeter测试多达5000个并发连接。由于我们产品的性质,5000个连接对我们来说已经足够了,所以我们没有再增加。
-
我使用https://a.testable.io/做另一个性能测试。我使用可测试的原因(这不是对他们的推销),我可以选择来自不同地点的客户,例如,我从北美选择了3个不同的地点,从亚洲选择了一个地点。我相信这比我在本地机器(我也有)上运行测试脚本更接近真实的场景。做这种测试是要花钱的,引用他们的技术支持的话,在我做了测试之后,"我看到你们今天也成功地运行了一个20,000用户测试,太棒了!"这种尺寸的测试不到20美元,这是目前为止最好的价格了:)。
顺便说一句,您也可以参考https://ably.com/topic/scaling-socketio,这是最新发布的关于socket的文章。
总而言之,我认为如果你只使用websocket, 5000到10000个并发连接应该不难实现。
配置完成后,您可以通过在终端
上写入以下命令进行检查sysctl -a | grep file