reusePort
Atenção
É necessário workerman>= 3.2.1 PHP>=7.0, sistemas Windows e Mac OS não suportam este recurso.
Descrição:
bool Worker::$reusePort
Define se o worker atual deve habilitar a reutilização do porto de escuta (opção SO_REUSEPORT do socket).
Ao habilitar a reutilização do porto de escuta, permite que vários processos não relacionados escutem na mesma porta, e o núcleo do sistema faz o balanceamento de carga, decidindo a qual processo deve ser atribuída a conexão do socket, evitando o efeito de explosão de processos, o que pode melhorar o desempenho de aplicações de múltiplos processos com conexões curtas.
Atenção: Este recurso requer PHP versão >=7.0
Exemplo 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');
};
// Executar worker
Worker::runAll();
Exemplo 2: workerman escutando múltiplas portas (múltiplos protocolos)
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;
// Cada processo, ao iniciar, adiciona uma nova escuta no processo atual
$worker->onWorkerStart = function($worker)
{
$inner_worker = new Worker('http://0.0.0.0:2016');
/**
* Vários processos escutam na mesma porta (os sockets não são herdados do processo pai)
* É necessário habilitar a reutilização de portas, caso contrário, ocorrerá o erro Address already in use
*/
$inner_worker->reusePort = true;
$inner_worker->onMessage = 'on_message';
// Executar escuta
$inner_worker->listen();
};
$worker->onMessage = 'on_message';
function on_message(TcpConnection $connection, $data)
{
$connection->send("hello\n");
}
// Executar worker
Worker::runAll();