reusePort

Внимание
Требуется workerman >= 3.2.1, PHP >= 7.0, Windows и Mac OS не поддерживают эту функцию

Описание:

bool Worker::$reusePort

Устанавливает, включен ли для текущего рабочего процесса режим повторного использования порта (опция 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::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::runAll();