Как транслировать (массово отправлять) данные

Пример (периодическая трансляция)

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 не может непосредственно управлять объектом подключения клиента процесса B для отправки данных. (Чтобы это реализовать, потребуется межпроцессное взаимодействие, например, можно использовать компонент Channel, например, пример - массовая отправка, пример - отправка по группам).

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

Адрес руководства GatewayWorker: https://doc2.workerman.net