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