reusePort
Nota
Requiere workerman>= 3.2.1 PHP>=7.0, los sistemas Windows y Mac OS no soportan esta característica
Descripción:
bool Worker::$reusePort
Configura si el trabajador actual activa la reutilización del puerto de escucha (opción SO_REUSEPORT del socket).
Al habilitar la reutilización del puerto de escucha, se permite que múltiples procesos no relacionados escuchen el mismo puerto, y el núcleo del sistema realiza balanceo de carga para decidir a qué proceso enviar la conexión del socket, evitando así el efecto de "manada" y mejorando el rendimiento de aplicaciones de conexiones cortas en múltiples procesos.
Nota: Esta característica requiere PHP versión >=7.0
Ejemplo 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');
};
// Ejecutar el trabajador
Worker::runAll();
Ejemplo 2: Escucha de múltiples puertos (múltiples protocolos) con 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;
// Después de iniciar cada proceso, agrega una nueva escucha en el proceso actual
$worker->onWorkerStart = function($worker)
{
$inner_worker = new Worker('http://0.0.0.0:2016');
/**
* Varios procesos escuchan el mismo puerto (el socket de escucha no se hereda del proceso padre)
* Se necesita activar la reutilización del puerto, de lo contrario, se reportará un error de dirección ya en uso
*/
$inner_worker->reusePort = true;
$inner_worker->onMessage = 'on_message';
// Ejecutar la escucha
$inner_worker->listen();
};
$worker->onMessage = 'on_message';
function on_message(TcpConnection $connection, $data)
{
$connection->send("hello\n");
}
// Ejecutar el trabajador
Worker::runAll();