Wie man Daten broadcastet (Gruppensendung)

Beispiel (zeitgesteuertes Broadcasting)

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 betragen
$worker->count = 1;
// Bei Start des Prozesses wird ein Timer gesetzt, der regelmäßig Daten an alle Client-Verbindungen sendet
$worker->onWorkerStart = function($worker)
{
    // Zeitgesteuert, alle 10 Sekunden
    Timer::add(10, function()use($worker)
    {
        // Durchlaufen aller aktuellen Client-Verbindungen im Prozess und Senden der aktuellen Serverzeit
        foreach($worker->connections as $connection)
        {
            $connection->send(time());
        }
    });
};
// Starte den Worker
Worker::runAll();

Beispiel (Gruppenchats)

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 betragen
$worker->count = 1;
// Wenn eine Nachricht vom Client empfangen wird, wird sie an andere Benutzer broadcastet
$worker->onMessage = function(TcpConnection $connection, $message)use($worker)
{
    foreach($worker->connections as $connection)
    {
        $connection->send($message);
    }
};
// Starte den Worker
Worker::runAll();

Erläuterung:

Einzelprozess:
Die obigen Beispiele können nur einzelprozess ($worker->count=1) sein, da mehrere Prozesse in einer Mehrprozessumgebung dazu führen können, dass mehrere Clients mit unterschiedlichen Prozessen verbunden sind. Die Clients zwischen den Prozessen sind isoliert und können nicht direkt kommunizieren, d.h. der Client-Connection-Objekt von Prozess A kann nicht direkt verwendet werden, um Daten an den Client im Prozess B zu senden. (Um dies zu erreichen, ist Interprozesskommunikation erforderlich, beispielsweise kann die Channel-Komponente verwendet werden, z.B. Beispiel - Cluster-Sendungen, Beispiel - Gruppensendungen).

Empfehlung: Verwendung von GatewayWorker
Das auf Workerman basierende GatewayWorker-Framework bietet eine bequemere Push-Mechanismus, einschließlich Multicast, Broadcast usw. Es kann mehrere Prozesse und sogar mehrere Server-Deployments einrichten. Wenn Daten an Clients gesendet werden müssen, wird die Verwendung des GatewayWorker-Frameworks empfohlen.

GatewayWorker Handbuch Adresse https://doc2.workerman.net