データのブロードキャスト(広報)

例(定期ブロードキャスト)

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プロセスのクライアントconnectionオブジェクトを直接操作してデータを送信することはできません。(これを実現するには、プロセス間通信が必要で、例えばChannelコンポーネントを使用することができます。たとえば、例-クラスタ送信例-グループ送信)が必要です)。

GatewayWorkerを使用することをお勧めします
Workermanを基に開発されたGatewayWorkerフレームワークは、マルチキャスト、ブロードキャストなどのより便利なプッシュメカニズムを提供し、多プロセスや複数サーバーのデプロイも設定でき、クライアントにデータをプッシュする必要がある場合は、GatewayWorkerフレームワークの使用をお勧めします。

GatewayWorkerマニュアルのURL https://doc2.workerman.net