我正在编写 socket.io-client node.js 机器人应用程序,以测试同样在 node 下运行的基于 socket.io 的服务器应用程序的性能。
服务器通常运行 ubuntu linux,但我也在我的本地开发机器上安装和配置了相同的服务器应用程序(node.js、nginx、socket.io)。
如果我启动我的 bot-“脚本”并启动 200 个创建到服务器的单独连接的 bot,如果我对真实服务器(即 linux 服务器)执行此操作,我没有任何问题。
但是,如果我连接到本地基于 os x 的“服务器”,我无法真正超过 ~120 个连接。
我遇到断开连接、陈旧的套接字和断开连接/重新连接的无限循环,在 socket.io 的标准设置下,这将需要越来越长的时间才能完成(延迟重新连接尝试)。
在这样的测试中,我的本地开发机器的负载几乎为 0%,因此它与内存或处理器无关。
我已经在第二台本地机器上尝试了相同的机器人脚本,以确保问题与在与服务器相同的机器上运行的机器人无关。但我遇到了同样的问题。
一旦我将机器人脚本指向真实服务器,我就没有任何问题。
当我处于问题发生的范围内时,即与超过 120 个客户端一起推送时,我尝试使用浏览器访问我的本地开发服务器(真实用户场景)并刷新多次。有时我得到一个“内部服务器 500”。
让我觉得这可能不是 socket.io 而是由 nginx 相关的?或常规 os x(非服务器)机器上的其他一些基本套接字限制?
最佳答案
我在发布这个问题之前所做的所有谷歌搜索...... 这样做 3 分钟后,我偶然发现了答案:
在终端中写入:
sysctl -a | grep somax
我得到了答案:
kern.ipc.somaxconn: 128
所以我想这个案子已经结束了。
只需在终端中写入:
sudo sysctl -w kern.ipc.somaxconn=xyz
其中 xyz 是允许的连接数。
在这里找到答案: http://b.oldhu.com/2012/07/19/increase-tcp-max-connections-on-mac-os-x/
关于os x 上的 node.js socket.io 服务器无法连接超过 120 个客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29795469/