PHP Websockets服务器在256个用户之后停止接受连接

时间:2017-01-25 14:56:53

标签: php apache sockets websocket

我在使用PHP7的Ubuntu 16盒子上使用https://github.com/ghedipunk/PHP-Websockets/blob/master/websockets.php运行websockets服务器

256个用户连接到websocket后,它停止连接,我无法弄清楚原因。在客户端,我得到一个1006错误代码(连接由浏览器实现异常(本地)关闭),没有进一步的信息。 websockets请求似乎没有出现在websockets服务器上(通常是echos"客户端已连接"在建立套接字连接之后)。

在connect()函数中,我所做的一件事是回显日志的用户数,套接字数和总体内存使用量。每当用户计数达到256(此时套接字计数为257,内存使用量约为4Mb)时,就会出现此问题。它发生在256的事实使我认为某个地方正在受到限制,但我无法找到这个限制。如果我重新启动websockets服务器,一切正常。

到目前为止,我的调查已经尝试并检查过:

  • ulimit(说不受限制)
  • MySQL连接限制(设置为默认值,现在为1000,但没有帮助)
  • 增加了PHP内存限制(因为为什么不,只是为了看)
  • SOMAXCONN设置为128,所以我不认为这是问题,但我必须重新编译PHP才能测试它。我还没试过这个。
  • Apache:问题发生时我收到的消息是:[proxy:error] [pid 16785] (111)Connection refused: AH00957: WS: attempt to connect to 10.0.0.240:9000 (websockets.mydomain.com) failed,它并没有告诉我任何事情。 Apache正在运行MPM prefork,我增加了备用服务器和MaxRequestWorkers

我愿意接受任何关于下一步的建议或如何从"连接拒绝"中获取更多细节的建议。来自apache的错误日志!

由于

1 个答案:

答案 0 :(得分:1)

它的Apache阻止了你。尝试在conf文件中设置以下内容...

MaxClients 512
ServerLimit 512

(你必须设置两者) 当然,您可以使用适合您的任何数字。在mpm-prefork中,你应该能够达到20,000,但这确实不是必需的。