最大并发套接字.输入输出连接



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

使用套接字。那么,在您需要添加另一个服务器之前,是否存在可以维持的最大并发连接数?

有谁知道大规模使用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。我们做了两种类型的性能测试,

  1. 我的测试团队使用JMeter测试多达5000个并发连接。由于我们产品的性质,5000个连接对我们来说已经足够了,所以我们没有再增加。

  2. 我使用https://a.testable.io/做另一个性能测试。我使用可测试的原因(这不是对他们的推销),我可以选择来自不同地点的客户,例如,我从北美选择了3个不同的地点,从亚洲选择了一个地点。我相信这比我在本地机器(我也有)上运行测试脚本更接近真实的场景。做这种测试是要花钱的,引用他们的技术支持的话,在我做了测试之后,"我看到你们今天也成功地运行了一个20,000用户测试,太棒了!"这种尺寸的测试不到20美元,这是目前为止最好的价格了:)。

顺便说一句,您也可以参考https://ably.com/topic/scaling-socketio,这是最新发布的关于socket的文章。

总而言之,我认为如果你只使用websocket, 5000到10000个并发连接应该不难实现。

配置完成后,您可以通过在终端

上写入以下命令进行检查
sysctl -a | grep file

相关内容

  • 没有找到相关文章

最新更新