reusePort
주의
workerman>= 3.2.1 및 PHP>=7.0이 필요하며, Windows 시스템과 Mac OS는 이 기능을 지원하지 않습니다.
설명:
bool Worker::$reusePort
현재 worker가 소켓의 SO_REUSEPORT 옵션을 통해 포트 재사용을 활성화할지 여부를 설정합니다.
포트 재사용을 활성화하면 여러 무관계 프로세스가 동일한 포트를 수신하고 시스템 커널이 부하 분산을 통해 어떤 프로세스가 소켓 연결을 처리할지 결정하게 되어, 놀람 효과를 피할 수 있으며, 다중 프로세스의 짧은 연결 애플리케이션 성능을 향상시킬 수 있습니다.
주의: 이 기능은 PHP 버전이 >=7.0이어야 합니다.
예제 1
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:8484');
$worker->count = 4;
$worker->reusePort = true;
$worker->onMessage = function(TcpConnection $connection, $data)
{
$connection->send('ok');
};
// worker 실행
Worker::runAll();
예제 2: workerman 다중 포트(다중 프로토콜) 수신
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.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(TcpConnection $connection, $data)
{
$connection->send("hello\n");
}
// worker 실행
Worker::runAll();