最大并发Socket.IO连接


123

之前(而不是最近)已经问过这个问题,并且没有明确的答案。

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

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

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


3
Trello大规模使用套接字(特别是socket.io)。
2014年

我读到,由于连接上限为10,000,Trello必须修改Socket.io代码,并且能够在添加服务器之前维护“数千个”连接。那与其他服务器系统的512K之间仍然是巨大的鸿沟。
2014年

1
那篇文章多大了?Trello最近刚刚达到每月超过100万个活动用户,因此我可以想象他们现在正在运行10,000多个活动套接字。Trello使用Redis坐在socket.io上以实现可伸缩性
James

2
Trello现在显然拥有超过400万用户,但是可以肯定的是,他们正在大量服务器上运行它,对吗?这使我回到最初的问题:每台服务器的(或其他任何人)实际峰值并发用户数是多少?知道他们使用哪种服务器/容器也​​将是一件好事。并且他们仍在运行自己的分叉,还是回到原点/主节点?我问这个问题的唯一目的是试图评估我的公司(当时)是否有能力维护大约120,000个并发连接的Socket.io应用程序。
2014年

1
关于端口限制,我觉得这是为什么不是问题的解释说明这里。基本上,系统上使用的唯一端口是您正在监听的端口。套接字是为每个连接创建的,它们使用文件描述符,但是它们不使用盒子上的端口。
Paul Lynch 2014年

Answers:


77

本文可能会一直为您提供帮助:http : //drewww.github.io/socket.io-benchmarking/

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

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


7
我意识到这是一个较旧的主题,但是我在寻找答案的问题时首先找到了它,最终发现它很有帮助:rtcamp.com/tutorials/linux/increase-open-files-limit每个进程的打开文件数限制可能默认情况下,软限制为1024,硬限制为4096,并且由于每个打开的TCP端口都代表一个文件,因此在尝试使库最大化之前,确定一台计算机将允许多少个开放套接字时,务必考虑这些限制。
DeeperID

2
@JAM您是否曾经发现您的Web套接字为何在1400-1800个连接中起作用?我遇到了同样的问题,我的文件限制设置为100,000,所以我知道这不是问题。任何帮助将不胜感激。谢谢。
塞斯

@seth:自从我上次审查以来已经有一段时间了,但是我认为这是个隐患:XHR轮询占用了太多的资源(与其他传输方式有关)。使用websocket时,并发连接数更高。
2015年

@JAM谢谢您的回答。我在使用ws模块而不是socket.io时看到了相同的问题,因此使用ws模块不应进行任何XHR轮询。那是我遇到故障排除的地方。搜索继续。
塞斯

这是一个很好的答案。.视情况而定也是正确的。.我个人建议ppl编写自己的基准测试或连接模拟器。尽管针对其他人的测试可能很好,但它并不代表现实环境...一旦您拥有了一个能够处理任何数量的具有各种现实世界错误的客户端的客户端模拟器。随时更新模拟器。操作用户聊天界面来监视用户浏览器等将有所不同。.Python我发现非常方便编写模拟器脚本...
2015年

16

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

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

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

在客户端设置此配置:

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

2
您是否使用过EC2(哪种实例)?t2.micro,t2.nano?
bvdb

2
强制使用Websocket时,您是否注意到响应能力有所不同?
劳伦(Lauren)

您知道实例的大小吗?同样,将来任何人都知道某些旧的浏览器不支持WebSocket,这就是为什么升级对某些浏览器可能很重要的原因。
Ryan Soderberg

我们如何测试服务器支持多少连接?您是如何测量9000个连接的?请建议..
好奇的开发人员


6

对于+ 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


如何检查我们的更改是否有效?
好奇的开发人员
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.