Como transmitir dados em broadcast (envio em massa)

Exemplo (broadcast programado)

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

$worker = new Worker('websocket://0.0.0.0:2020');
// Neste exemplo, o número de processos deve ser 1
$worker->count = 1;
// Ao iniciar o processo, define um temporizador para enviar dados para todas as conexões dos clientes periodicamente
$worker->onWorkerStart = function($worker)
{
    // Envia a cada 10 segundos
    Timer::add(10, function() use ($worker)
    {
        // Percorre todas as conexões de clientes atuais do processo e envia a hora atual do servidor
        foreach ($worker->connections as $connection)
        {
            $connection->send(time());
        }
    });
};
// Executa o worker
Worker::runAll();

Exemplo (chat em grupo)

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');
// Neste exemplo, o número de processos deve ser 1
$worker->count = 1;
// Quando o cliente envia uma mensagem, broadcast para os outros usuários
$worker->onMessage = function(TcpConnection $connection, $message) use ($worker)
{
    foreach ($worker->connections as $connection)
    {
        $connection->send($message);
    }
};
// Executa o worker
Worker::runAll();

Explicação:

Único processo:
Os exemplos acima só funcionam com um único processo ($worker->count=1), pois com vários processos, diferentes clientes podem ser conectados a processos diferentes, e as conexões dos clientes entre os processos são isoladas, não podendo se comunicar diretamente. Em outras palavras, o processo A não pode operar diretamente o objeto de conexão do cliente do processo B para enviar dados. (Para fazer isso, é necessário comunicação entre processos, como o uso do componente Channel, por exemplo Exemplo - Envio em cluster, Exemplo - Envio em grupo).

Recomenda-se o uso do GatewayWorker:
A estrutura GatewayWoker, desenvolvida com base no Workerman, oferece um mecanismo de push mais conveniente, incluindo multicast, broadcast, etc. Pode ser configurada com vários processos e até mesmo ser implantada em vários servidores. Se precisar enviar dados para os clientes, é recomendável utilizar a estrutura GatewayWorker.

Endereço do manual do GatewayWorker: https://doc2.workerman.net