我想将最大 WS 连接数硬限制为 100。我正在编写一个 node.js 服务器,我不应该允许超过 100 个连接。
如何在不触及系统ulimit的情况下限制 Websocket 连接数?
只是为了扩展我添加的评论,我可以通过使用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,我没有更改任何服务器范围的设置。