reusePort
Attention
Nécessite workerman>= 3.2.1 PHP>=7.0, les systèmes Windows et Mac OS ne supportent pas cette fonctionnalité.
Description:
bool Worker::$reusePort
Détermine si le worker actuel active la réutilisation des ports d'écoute (option SO_REUSEPORT du socket).
En activant la réutilisation des ports d'écoute, plusieurs processus sans relation parent-enfant peuvent écouter le même port, et le noyau du système effectue un équilibrage de charge pour décider à quel processus le socket connecté est attribué, évitant ainsi l'effet de foule et améliorant la performance des applications multi-processus à connexions courtes.
Attention : Cette fonctionnalité nécessite une version PHP >= 7.0
Exemple 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');
};
// Exécuter le worker
Worker::runAll();
Exemple 2 : Écoute de plusieurs ports (multi-protocoles) avec 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;
// Après le démarrage de chaque processus, un nouvel écouteur est ajouté dans le processus actuel
$worker->onWorkerStart = function($worker)
{
$inner_worker = new Worker('http://0.0.0.0:2016');
/**
* Plusieurs processus écoutent le même port (les sockets d'écoute ne sont pas hérités du processus parent)
* Nécessite d'activer la réutilisation des ports, sinon une erreur Address already in use sera levée
*/
$inner_worker->reusePort = true;
$inner_worker->onMessage = 'on_message';
// Exécuter l'écoute
$inner_worker->listen();
};
$worker->onMessage = 'on_message';
function on_message(TcpConnection $connection, $data)
{
$connection->send("hello\n");
}
// Exécuter le worker
Worker::runAll();