Come trasmettere (broadcast) i dati
Esempio (broadcast programmato)
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;
// Al momento dell'avvio del processo, imposta un timer per inviare periodicamente dati a tutti i client connessi
$worker->onWorkerStart = function($worker)
{
// Ogni 10 secondi invia
Timer::add(10, function()use($worker)
{
// Itera su tutte le connessioni attualmente aperte nel processo e invia l'ora attuale del server
foreach($worker->connections as $connection)
{
$connection->send(time());
}
});
};
// Avvia 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 cliente invia un messaggio, lo invia a tutti gli altri utenti
$worker->onMessage = function(TcpConnection $connection, $message)use($worker)
{
foreach($worker->connections as $connection)
{
$connection->send($message);
}
};
// Avvia il worker
Worker::runAll();
Spiegazione:
Singolo processo:
Gli esempi sopra funzionano solo con un solo processo ($worker->count=1
), poiché con più processi diversi client potrebbero connettersi a processi diversi e le connessioni tra processi sono isolate, quindi non è possibile comunicare direttamente tra di loro. In altre parole, un processo A non può operare direttamente sugli oggetti di connessione dei client del processo B (per ottenere questo, è necessaria la comunicazione tra i processi, ad esempio utilizzando il componente Channel, come ad esempio Esempio - Invio cluster, Esempio - Invio gruppi).
È consigliato utilizzare GatewayWorker
Il framework GatewayWorker, sviluppato sulla base di Workerman, fornisce un meccanismo di trasmissione più conveniente, inclusa la trasmissione a gruppi, la trasmissione broadcast, ecc. Può essere configurato con più processi e persino con più server. Se è necessario inviare dati ai client, è consigliabile utilizzare il framework GatewayWorker.
Indirizzo del manuale di GatewayWorker https://doc2.workerman.net