Come trasmettere (inviare a più destinatari) dati

Esempio (trasmissione programmata)

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

$worker = new Worker('websocket://0.0.0.0:2020');
// In questo esempio, il numero di processi deve essere 1
$worker->count = 1;
// Imposta un timer al momento dell'avvio del processo, per inviare dati a tutti i client connessi
$worker->onWorkerStart = function($worker)
{
    // Ogni 10 secondi
    Timer::add(10, function()use($worker)
    {
        // Itera su tutte le connessioni dei client del processo corrente, inviando l'ora attuale del server
        foreach($worker->connections as $connection)
        {
            $connection->send(time());
        }
    });
};
// Esegui il worker
Worker::runAll();

Esempio (chat di gruppo)

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 questo esempio, il numero di processi deve essere 1
$worker->count = 1;
// Quando un client invia un messaggio, trasmettilo agli altri utenti
$worker->onMessage = function(TcpConnection $connection, $message)use($worker)
{
    foreach($worker->connections as $connection)
    {
        $connection->send($message);
    }
};
// Esegui il worker
Worker::runAll();

Spiegazione:

Singolo processo:
Gli esempi sopra possono funzionare solo in singolo processo ($worker->count=1), poiché in caso di più processi, diversi client potrebbero connettersi a processi differenti, rendendo i client tra i vari processi isolati e impossibilitati a comunicare direttamente. In altre parole, un processo A non può direttamente operare sull'oggetto connection del client nel processo B per inviare dati. (Per riuscirci, è necessario utilizzare la comunicazione inter-processo, ad esempio utilizzando il componente Channel, come esempio - invio in cluster, esempio - invio di gruppo).

Consiglio di usare GatewayWorker
Il framework GatewayWorker, sviluppato su Workerman, offre un meccanismo di push più conveniente, che include multicast e broadcast, e permette di impostare più processi o addirittura più server. Se è necessario inviare dati ai client, si consiglia di utilizzare il framework GatewayWorker.

Indirizzo del manuale di GatewayWorker: https://doc2.workerman.net