为什么始终只有一个进程接收请求

0

我在使用过程中发现自己不管怎么试,所有请求都打在一个进程上面。


然后自己写了个简单的示例,使用 sleep() 阻塞住进程,哪怕其中一个进程阻塞了,其它的请求依然打在这个进程上面,其它进程全部旁观。


我知道浏览器会保持连接,于是我打开多个不同的浏览器,还是这样。
我使用 curl 命令试了还是这样。


示例代码:


<?php

use Workerman\Worker;

require __DIR__.'/vendor/autoload.php';

$worker = new Worker('http://0.0.0.0:2346');
$worker->count = 2;
$worker->onMessage = function($connection, $request) {
sleep(5);
$connection->send('Block sleep 5 seconds.');
};

Worker::runAll();

不管怎么试,都只有一个进程接收了请求,我用两个浏览器,用 curl 命令,或者在两台IP不同的机器上发起,都是这样。

捕获.PNG
已邀请:

walkor

赞同来自:

操作系统是?

pader - phper

赞同来自:

Windows WSL2 的 Ubuntu,还有 FreeBSD。
截图是 FreeBSD 的,都一样。

walkor

赞同来自:

WSL2 的reusePort有bug。
设置 $worker->reusePort = false; 就好了

pader - phper

赞同来自:

reusePort默认是关的吧?

pader - phper

赞同来自:

确实我关闭 reusePort 就好了,这个原来会自动判断在 Linux 上启用 reusePort,在 FreeBSD 上也被认为是 Linux 了。
好像除了 Windows 其它系统均被认为是 Linux,我很好奇为什么不用 PHP_OS 常量来做操作系统判断,而是用目录分割符来做判断。
这一块应该可以做的更好一点,另外 FreeBSD 的环境跟 MacOS 其实类似,希望把 FreeBSD 也考虑进去。

要回复问题请先登录注册