reusePort
Hinweis
Erfordert Workerman >= 3.2.1 PHP >= 7.0. Diese Funktion wird nicht von Windows-Systemen und Mac OS unterstützt.
Beschreibung:
bool Worker::$reusePort
Legt fest, ob der aktuelle Worker das Wiederverwenden des Portüberwachungsports (SO_REUSEPORT-Option des Sockets) aktiviert.
Durch das Aktivieren des Wiederverwendens des Portüberwachungsports können mehrere nicht verwandte Prozesse denselben Port überwachen, und das Betriebssystem-Kernel entscheidet, welcher Prozess die Socket-Verbindung behandeln wird, um den Effekt des "Thundering Herd"-Phänomens zu vermeiden und die Leistung von Multi-Prozess-Kurzverbindungsanwendungen zu verbessern.
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 ausführen
Worker::runAll();
Beispiel 2: Workerman überwacht mehrere Ports (mehrere Protokolle)
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;
// Nachdem jeder Prozess gestartet wurde, einen neuen Port im aktuellen Prozess hinzufügen
$worker->onWorkerStart = function($worker)
{
$inner_worker = new Worker('http://0.0.0.0:2016');
/**
* Mehrere Prozesse überwachen denselben Port (der Überwachungssocket wird nicht vom Elternprozess geerbt)
* Das Port-Reuse muss aktiviert sein, damit keine "Address already in use"-Fehler auftreten
*/
$inner_worker->reusePort = true;
$inner_worker->onMessage = 'on_message';
// Überwachung ausführen
$inner_worker->listen();
};
$worker->onMessage = 'on_message';
function on_message(TcpConnection $connection, $data)
{
$connection->send("hello\n");
}
// Worker ausführen
Worker::runAll();