イベントのブロードキャスト
Socket.IOを使用すると、接続されているすべてのクライアントに簡単にイベントを送信できます。
情報
ブロードキャストはサーバーのみの機能であることにご注意ください。
接続されているすべてのクライアントへ


io.emit("hello", "world");
注意
現在切断されている(または再接続中の)クライアントはイベントを受信しません。このイベントをどこか(たとえばデータベース)に保存するかどうかは、ユースケースによって異なります。
送信者を除くすべての接続クライアントへ


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アダプターまたは別の互換性のあるアダプターに置き換えるだけです。


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


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