Wie man Daten broadcastet (Gruppenversand)

Beispiel (Zeitgesteuerter Broadcast)

use Workerman\Worker;
use Workerman\Timer;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('websocket://0.0.0.0:2020');
// In diesem Beispiel muss die Anzahl der Prozesse 1 sein
$worker->count = 1;
// Beim Start des Prozesses einen Timer einstellen, um in regelmäßigen Abständen Daten an alle Client-Verbindungen zu senden
$worker->onWorkerStart = function($worker)
{
    // Zeitgesteuert, alle 10 Sekunden
    Timer::add(10, function()use($worker)
    {
        // Gehe alle aktuellen Client-Verbindungen in diesem Prozess durch und sende die aktuelle Serverzeit
        foreach($worker->connections as $connection)
        {
            $connection->send(time());
        }
    });
};
// Starte den Worker
Worker::runAll();

Beispiel (Gruppenchat)

use Workerman\Worker;
use Workerman\Timer;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('websocket://0.0.0.0:2020');
// In diesem Beispiel muss die Anzahl der Prozesse 1 sein
$worker->count = 1;
// Beim Empfang einer Nachricht vom Client, diese an alle anderen Benutzer broadcasten
$worker->onMessage = function(TcpConnection $connection, $message)use($worker)
{
    foreach($worker->connections as $connection)
    {
        $connection->send($message);
    }
};
// Starte den Worker
Worker::runAll();

Erklärung:

Einzelner Prozess:
Die obigen Beispiele funktionieren nur mit einem einzelnen Prozess ($worker->count=1), da bei mehreren Prozessen mehrere Clients möglicherweise mit verschiedenen Prozessen verbunden werden und die Clients zwischen den Prozessen isoliert sind, was bedeutet, dass ein Prozess A nicht direkt auf das Client-Verbindungsobjekt von Prozess B zugreifen und Daten senden kann. (Um dies zu erreichen, ist eine Kommunikation zwischen den Prozessen erforderlich, beispielsweise kann die Channel-Komponente verwendet werden, wie im Beispiel - Cluster-Sendung oder Beispiel - Gruppen-Sendung).

Empfohlen wird die Verwendung von GatewayWorker:
Das auf Workerman basierende GatewayWoker-Framework bietet eine bequemere Push-Mechanismus, einschließlich Gruppenübertragung, Broadcast usw. Es kann in mehreren Prozessen oder sogar auf mehreren Servern bereitgestellt werden. Wenn Daten an Clients gesendet werden müssen, wird die Verwendung des GatewayWorker-Frameworks empfohlen.

GatewayWorker-Handbuch unter: https://doc2.workerman.net