我在使用過(guò)程中發(fā)現(xiàn)自己不管怎么試,所有請(qǐng)求都打在一個(gè)進(jìn)程上面。
然后自己寫了個(gè)簡(jiǎn)單的示例,使用 sleep() 阻塞住進(jìn)程,哪怕其中一個(gè)進(jìn)程阻塞了,其它的請(qǐng)求依然打在這個(gè)進(jìn)程上面,其它進(jìn)程全部旁觀。
我知道瀏覽器會(huì)保持連接,于是我打開多個(gè)不同的瀏覽器,還是這樣。
我使用 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();
不管怎么試,都只有一個(gè)進(jìn)程接收了請(qǐng)求,我用兩個(gè)瀏覽器,用 curl 命令,或者在兩臺(tái)IP不同的機(jī)器上發(fā)起,都是這樣。
確實(shí)我關(guān)閉 reusePort 就好了,這個(gè)原來(lái)會(huì)自動(dòng)判斷在 Linux 上啟用 reusePort,在 FreeBSD 上也被認(rèn)為是 Linux 了。
好像除了 Windows 其它系統(tǒng)均被認(rèn)為是 Linux,我很好奇為什么不用 PHP_OS 常量來(lái)做操作系統(tǒng)判斷,而是用目錄分割符來(lái)做判斷。
這一塊應(yīng)該可以做的更好一點(diǎn),另外 FreeBSD 的環(huán)境跟 MacOS 其實(shí)類似,希望把 FreeBSD 也考慮進(jìn)去。