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