Cómo transmitir (broadcast) datos

Ejemplo (broadcast programado)

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

$worker = new Worker('websocket://0.0.0.0:2020');
// En este ejemplo, el número de procesos debe ser 1
$worker->count = 1;
// Al iniciar el proceso, establece un temporizador para enviar datos a todas las conexiones de cliente
$worker->onWorkerStart = function($worker)
{
    // Cada 10 segundos
    Timer::add(10, function()use($worker)
    {
        // Recorre todas las conexiones de cliente del proceso actual y envía la hora actual del servidor
        foreach($worker->connections as $connection)
        {
            $connection->send(time());
        }
    });
};
// Ejecutar worker
Worker::runAll();

Ejemplo (chat grupal)

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');
// En este ejemplo, el número de procesos debe ser 1
$worker->count = 1;
// Cuando un cliente envía un mensaje, este se transmite a otros usuarios
$worker->onMessage = function(TcpConnection $connection, $message)use($worker)
{
    foreach($worker->connections as $connection)
    {
        $connection->send($message);
    }
};
// Ejecutar worker
Worker::runAll();

Notas:

Proceso único:
Los ejemplos anteriores solo pueden ser de un solo proceso ($worker->count=1), porque en un entorno de múltiples procesos, varios clientes pueden conectarse a diferentes procesos, y los clientes entre procesos están aislados, no pueden comunicarse directamente, es decir, no se puede operar directamente el objeto de conexión del cliente del proceso B desde el proceso A para enviar datos. (Para lograr esto, se necesita comunicación entre procesos, por ejemplo, se puede utilizar el componente Channel, como en ejemplo - envío en clúster, ejemplo - envío en grupo).

Se recomienda usar GatewayWorker
El marco GatewayWorker, desarrollado sobre la base de Workerman, ofrece un mecanismo de envío más conveniente, que incluye multidifusión, broadcast, etc. Se pueden configurar múltiples procesos e incluso múltiples servidores. Si es necesario enviar datos a los clientes, se recomienda utilizar el marco GatewayWorker.

La dirección del manual de GatewayWorker es https://doc2.workerman.net