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();