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