Как отправить широковещательные (групповые) данные

Пример (регулярная рассылка)

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

$worker = new Worker('websocket://0.0.0.0:2020');
// В этом примере количество процессов должно быть равно 1
$worker->count = 1;
// При запуске процесса устанавливаем таймер для регулярной отправки данных всем клиентам
$worker->onWorkerStart = function($worker)
{
    // Регулярная отправка данных каждые 10 секунд
    Timer::add(10, function()use($worker)
    {
        // Перебираем все соединения текущего процесса и отправляем текущее время сервера
        foreach($worker->connections as $connection)
        {
            $connection->send(time());
        }
    });
};
// Запуск worker
Worker::runAll();

Пример (групповой чат)

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');
// В этом примере количество процессов должно быть равно 1
$worker->count = 1;
// При получении сообщения от клиента, отправляем его всем остальным пользователям
$worker->onMessage = function(TcpConnection $connection, $message)use($worker)
{
    foreach($worker->connections as $connection)
    {
        $connection->send($message);
    }
};
// Запуск worker
Worker::runAll();

Пояснение:

Одиночный процесс:
Приведенные выше примеры могут работать только с одним процессом ($worker->count=1), потому что при многопроцессорном запуске различные клиенты могут подключаться к разным процессам, и клиенты из разных процессов будут изолированы друг от друга и не смогут напрямую общаться. Например, процесс A не сможет напрямую управлять объектами connection клиентов процесса B (для этого требуется межпроцессорное взаимодействие, такое как использование компонента Channel, например Пример-кластерная отправка, Пример-групповая отправка).

Рекомендуется использовать GatewayWorker
GatewayWoker, разработанный на основе Workerman, предоставляет более удобный механизм рассылки, включая групповые сообщения и широковещательные рассылки, а также позволяет настраивать многопроцессорное и даже многосерверное развертывание. Если требуется отправлять данные клиентам, рекомендуется использовать фреймворк GatewayWorker.

Ссылка на руководство по GatewayWorker: https://doc2.workerman.net