os x上的node.js socket.io服务器无法连接超过120个客户端

时间:2015-04-22 11:01:46

标签: node.js nginx socket.io osx-yosemite

我正在编写socket.io-client node.js bot app,以便测试我的基于socket.io的服务器应用程序的性能也在节点下运行。

通常服务器运行ubuntu linux但我也在我的本地开发机器上安装和配置了相同的服务器应用程序(node.js,nginx,socket.io)。

如果我启动我的机器人 - "脚本"并启动200个机器人创建与服务器的单独连接我没有任何问题,如果我这样做真正的服务器,Linux服务器。

但是,如果我连接到我的本地操作系统基于"服务器"我无法真正克服~120个连接。

我得到断开连接,过时的套接字以及无限循环的断开/重新连接,这在socket.io的标准设置下只需要更长的时间来完成(延迟重新连接尝试)。

在这样的测试中,我的本地开发机器的负载几乎为0%,因此它与内存或处理器无关。

我已尝试从第二台本地计算机使用相同的bot脚本,以确保该问题与运行在与服务器相同的计算机上的机器人无关。但我得到同样的问题。

只要我将机器人脚本指向真实的服务器,我就没有任何问题。

当我处于问题发生的范围内时,即推送超过120个客户端时,我尝试使用浏览器(真实用户场景)访问我的本地开发服务器并刷新多次。有时我会得到一个内部服务器500"。

让我觉得这可能不是与nginx有关的socket.io吗?或者常规os x(非服务器)机器上的其他一些基本套接字限制?

2 个答案:

答案 0 :(得分:3)

在发布此问题之前我所做的所有谷歌搜索..... 这样做了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/

答案 1 :(得分:0)

somaxconn值128似乎是一个可以接受的解决方案。但在我的情况下,改变这个价值并没有做到。

这篇文章解释了解决方案。 http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X

问题是最大过程限制和最大打开文件限制。 人们可以通过写作来查看这些限制 ulimit -u(打开文档) ulimit -n(max procc)

更改它们的运行时对我来说效果不好,但上面的链接解释了如何为许多流行的操作系统永久更改这些值。

在我做出这个改变之后,我没有遇到超出之前限制的问题,我的kern.ipc.somaxconn:仍然是128 ..