reusePort

Attenzione
È necessario workerman>= 3.2.1 PHP>=7.0. Windows e Mac OS non supportano questa funzionalità.

Descrizione:

bool Worker::$reusePort

Imposta se il worker corrente deve attivare la riutilizzazione della porta in ascolto (opzione SO_REUSEPORT del socket).

Attivando la riutilizzazione della porta in ascolto, è possibile consentire a più processi non correlati di ascoltare sulla stessa porta, e il kernel del sistema gestirà il bilanciamento del carico, decidendo quale processo elaborerà la connessione socket, evitando l'effetto di eccesso di notifica e migliorando le prestazioni delle applicazioni a connessione corta multithreading.

Nota: Questa funzionalità richiede PHP versione >=7.0.

Esempio 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');
};
// Esegui il worker
Worker::runAll();

Esempio 2: ascolto multi-porta (multi-protocol) di 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;
// Dopo l'avvio di ogni processo, aggiungere un nuovo ascolto nel processo corrente
$worker->onWorkerStart = function($worker)
{
    $inner_worker = new Worker('http://0.0.0.0:2016');
    /**
     * Più processi ascoltano sulla stessa porta (il socket di ascolto non è ereditato dal processo padre)
     * È necessario attivare il riutilizzo della porta, altrimenti verrà restituito un errore Address already in use
     */
    $inner_worker->reusePort = true;
    $inner_worker->onMessage = 'on_message';
    // Esegui l'ascolto
    $inner_worker->listen();
};

$worker->onMessage = 'on_message';

function on_message(TcpConnection $connection, $data)
{
    $connection->send("hello\n");
}

// Esegui il worker
Worker::runAll();