最大并发Socket.IO连接数

And*_*rew 102 websocket socket.io

这个问题之前已被问过,但最近没有问过,也没有明确答案.

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

有没有人知道任何大规模使用websockets(特别是socket.io)的活动生产环境?我真的想知道什么样的设置最适合最大连接?

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

JAM*_*JAM 65

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

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

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

  • 我意识到这是一个较老的话题,但我在搜索问题时首先发现了它,并最终发现这有用:https://rtcamp.com/tutorials/linux/increase-open-files-limit/每个进程的文件限制可能默认为软限制为1024,硬限制为4096,并且由于每个打开的TCP端口都代表一个文件,因此在确定机器允许的开放套接字数量之前考虑这些限制很重要,然后再尝试最大化库. (5认同)
  • @JAM你有没有发现为什么你的网络套接字在大约1400-1800个连接上运行?我有相同的问题,我的文件限制设置为100,000,所以我知道这不是问题.任何帮助将不胜感激.谢谢. (2认同)

小智 16

在继续之前仔细阅读此答案的评论

问题询问 socket.io 套接字,答案是本机套接字。这些更改很危险,因为它们适用于系统上的所有内容,而不仅仅是 socket.io 套接字。此外,今天的网络从来都不是 socket.io 的瓶颈。在没有先了解其含义的情况下,不要对您的系统进行这些更改。

对于 +300k 并发连接:

将这些变量设置为/etc/sysctl.conf

fs.file-max = 10000000 
fs.nr_open = 10000000
Run Code Online (Sandbox Code Playgroud)

此外,更改这些变量/etc/security/limits.conf

* soft nofile 10000000
* hard nofile 10000000
root soft nofile 10000000
root hard nofile 10000000
Run Code Online (Sandbox Code Playgroud)

最后,也增加 中的 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
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅

  • 问题询问有关 socket.io 套接字的问题,答案是针对本机套接字的。这些更改很危险,因为它们适用于系统上的**所有**,而不仅仅是 socket.io 套接字。此外,今天的网络从来都不是socket.io 的瓶颈。**在未首先了解其影响的情况下,请勿对您的系统进行这些更改。** (3认同)
  • 您可以编辑您的答案并简要解释一下这里发生了什么吗? (2认同)

Dan*_*ach 13

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

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

我不清楚他究竟使用了多少个端口.

  • 没有socket.io我想,甚至没有websockets.这家伙似乎正在使用长轮询,我认为资源不足. (11认同)

小智 11

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

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

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

在客户端设置此配置:

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

  • 您使用的是EC2,哪种实例?t2.micro,t2.nano? (10认同)
  • 这个线程很旧,但是有人知道要使用哪种 EC2 实例吗?我试图找出选择哪个实例:50、100、200 和 300 个并发连接。希望有人能回答。 (3认同)
  • 当您强制使用 Websocket 时,您是否注意到响应能力有所不同? (2认同)