reusePort
Hinweis
Erfordert workerman>= 3.2.1 PHP>=7.0, Windows-Systeme und Mac OS unterstützen diese Funktion nicht.
Beschreibung:
bool Worker::$reusePort
Setzt, ob der aktuelle Worker die Portwiederverwendung (SO_REUSEPORT-Option des Sockets) aktiviert.
Mit aktivierter Portwiederverwendung können mehrere nicht verwandte Prozesse denselben Port überwachen, und der Systemkernel entscheidet mittels Lastenverteilung, welcher Prozess die Socket-Verbindung bearbeitet. Dadurch wird der sogenannte "Thundering Herd"-Effekt vermieden und die Leistung von Multi-Prozess Aplikationen mit kurzen Verbindungen verbessert.
Hinweis: Diese Funktion erfordert PHP-Versionen >=7.0.
Beispiel 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 starten
Worker::runAll();
Beispiel 2: Workerman Mehrport (Mehrprotokoll) Überwachung
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;
// Nach dem Start jedes Prozesses wird ein weiterer Listener im aktuellen Prozess hinzugefügt
$worker->onWorkerStart = function($worker)
{
$inner_worker = new Worker('http://0.0.0.0:2016');
/**
* Mehrere Prozesse überwachen denselben Port (Die Listening-Sockets werden nicht vom Elternprozess vererbt)
* Portwiederverwendung muss aktiviert sein, ansonsten wird ein Address already in use-Fehler angezeigt.
*/
$inner_worker->reusePort = true;
$inner_worker->onMessage = 'on_message';
// Listener ausführen
$inner_worker->listen();
};
$worker->onMessage = 'on_message';
function on_message(TcpConnection $connection, $data)
{
$connection->send("hello\n");
}
// Worker starten
Worker::runAll();