【发布时间】:2019-11-07 12:14:24
【问题描述】:
我想将最大 WS 连接数硬限制为 100。我正在编写一个 node.js 服务器,我不应该允许超过 100 个连接。
不接触系统ulimit如何限制Websocket连接数?
【问题讨论】:
-
用户ulimit怎么样,例如
ulimit -n 110 -
@DarrenSmith 我也在其他端口运行其他服务器。所以我不能改变 ulimit。
我想将最大 WS 连接数硬限制为 100。我正在编写一个 node.js 服务器,我不应该允许超过 100 个连接。
不接触系统ulimit如何限制Websocket连接数?
【问题讨论】:
ulimit -n 110
只是为了扩展我添加的评论,我可以使用 per-session ulimit -n 命令来限制我的服务器打开的 websocket 连接的数量。
即,在启动我的 websocket 服务器之前,在我运行的控制台中:
ulimit -n 12
.. 成功(运行ulimit -a 确认)
然后我启动我的服务器并通过在命令前加上 strace 来跟踪它的系统调用:
strace -F -f -e trace=network ./myserver --port 33345
然后我会创建许多并发客户端连接。在建立了大约 6 到 8 个连接后,进一步的客户端尝试失败,我在服务器 strace 输出中看到了这一点:
[pid 24344] accept4(10, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK) = -1 EMFILE (Too many open files)
[pid 24344] accept4(10, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK) = 9
[pid 24344] accept4(10, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK) = -1 EAGAIN (Resource temporarily unavailable)
请注意,新的终端会话看不到此 ulimit,我没有更改任何服务器范围的设置。
【讨论】: