メインコンテンツへスキップ
バージョン: 4.x

イベントのブロードキャスト

Socket.IOを使用すると、接続されているすべてのクライアントに簡単にイベントを送信できます。

情報

ブロードキャストはサーバーのみの機能であることにご注意ください。

接続されているすべてのクライアントへ

Broadcasting to all connected clientsBroadcasting to all connected clients
io.emit("hello", "world");
注意

現在切断されている(または再接続中の)クライアントはイベントを受信しません。このイベントをどこか(たとえばデータベース)に保存するかどうかは、ユースケースによって異なります。

送信者を除くすべての接続クライアントへ

Broadcasting to all connected clients excepting the senderBroadcasting to all connected clients excepting the sender
io.on("connection", (socket) => {
socket.broadcast.emit("hello", "world");
});
注意

上記の例では、socket.emit("hello", "world")broadcastフラグなし)を使用すると、イベントは「クライアントA」に送信されます。イベントを送信するすべての方法のリストは、チートシートで確認できます。

確認応答付き

Socket.IO 4.5.0以降、複数のクライアントにイベントをブロードキャストし、それぞれのクライアントからの確認応答を期待できるようになりました。

io.timeout(5000).emit("hello", "world", (err, responses) => {
if (err) {
// some clients did not acknowledge the event in the given delay
} else {
console.log(responses); // one response per client
}
});

すべてのブロードキャスト形式がサポートされています

  • ルーム内
io.to("room123").timeout(5000).emit("hello", "world", (err, responses) => {
// ...
});
  • 特定のsocketから
socket.broadcast.timeout(5000).emit("hello", "world", (err, responses) => {
// ...
});
  • 名前空間内
io.of("/the-namespace").timeout(5000).emit("hello", "world", (err, responses) => {
// ...
});

複数のSocket.IOサーバーを使用する場合

ブロードキャストは、複数のSocket.IOサーバーでも機能します。

デフォルトのアダプターをRedisアダプターまたは別の互換性のあるアダプターに置き換えるだけです。

Broadcasting with RedisBroadcasting with Redis

場合によっては、現在のサーバーに接続しているクライアントのみにブロードキャストしたい場合があります。これは、localフラグで実現できます。

io.local.emit("hello", "world");
Broadcasting with Redis but localBroadcasting with Redis but local

ブロードキャスト時に特定のクライアントをターゲットにするには、ルームに関するドキュメントを参照してください。