php开启端口复用,请问下workman是否支持端口复用?
workerman 支持端口復用。
bool Worker::$reusePort
設置當前worker是否開啟監聽端口復用(socket的SO_REUSEPORT選項)。
開啟監聽端口復用后允許多個無親緣關系的進程監聽相同的端口,并且由系統內核做負載均衡,決定將socket連接交給哪個進程處理,避免了驚群效應,可以提升多進程短連接應用的性能。
注意: 此特性需要PHP版本>=7.0
注意: 從workerman 3.5.21版本開始默認開啟此選項。之前版本需要手動設置Worker::$reusePort=true;開啟。
范例 1
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
$worker = new Worker('websocket://0.0.0.0:8484');
$worker->count = 4;
$worker->reusePort = true;
$worker->onMessage = function($connection, $data)
{
$connection->send('ok');
};
// 運行worker
Worker::runAll();
范例2:workerman多端口(多協議)監聽
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
$worker = new Worker('text://0.0.0.0:2015');
$worker->count = 4;
// 每個進程啟動后在當前進程新增一個監聽
$worker->onWorkerStart = function($worker)
{
$inner_worker = new Worker('http://0.0.0.0:2016');
/**
* 多個進程監聽同一個端口(監聽套接字不是繼承自父進程)
* 需要開啟端口復用,不然會報Address already in use錯誤
*/
$inner_worker->reusePort = true;
$inner_worker->onMessage = 'on_message';
// 執行監聽
$inner_worker->listen();
};
$worker->onMessage = 'on_message';
function on_message($connection, $data)
{
$connection->send("hello\n");
}
// 運行worker
Worker::runAll();
總結
以上是生活随笔為你收集整理的php开启端口复用,请问下workman是否支持端口复用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell统计指定目录下所有文件类型及数
- 下一篇: header的安全配置指南