113

io.sockets.emitとsocket.broadcast.emitの違いは何ですか?ブロードキャストがすべての人に送信されるのは、それを送信するソケットだけですか?

それらは交換可能に使用できるようです:

io.sockets.on('connection', function (socket) {
  //these should do the same thing  
  io.sockets.emit('this', { receivers: 'everyone'});

  socket.broadcast.emit('this', { receivers: 'everyone but socket'}); //emits to everyone but socket
  socket.emit('this', { receivers: 'socket'}); //emits to socket
});
4

4 に答える 4

191

io.sockets.emitすべてのクライアントに送信します

socket.broadcast.emit新しく作成された接続を除く他のすべてのクライアントにメッセージを送信します

このSocket.IOWikiの投稿は、この質問を読むすべての人に役立ちます。

最近のチートシートもここで表示できます。

https://socket.io/docs/v4/emit-cheatsheet

于 2012-04-27T04:49:50.203 に答える
52

socket.broadcast.emit()と同様に動作しますがio.sockets.emit、接続されているすべてのソケットに送信する代わりに、呼び出されているソケットを除くすべての接続されているソケットに送信します。したがって、この場合、によって参照されるソケットsocketはイベントを受信しません。

于 2013-03-21T07:58:18.143 に答える
10

シナリオ:1:-io.sockets.emitの使用による詳細 図:-io.sockets.emit

ここで、すべてのソケットはイニシエーターを含むメッセージを受け取ります。

  // BY IO>SOCKETS>EMIT
   io.sockets.emit('MyChannelBroadcast',
               {
                 owner:"Anshu Ashish",
                 clientCount:clients,
                 message:"Welcome All"
               }
    );

シナリオ:2:-socket.broadcast.emitの使用による詳細 図:-socket.broadcast.emit

ここでは、1つ、つまりイニシエーターを除いて、すべてのソケットがメッセージを受信して​​います。

    // BY SOCKET>BROADCAST>EMIT
   socket.broadcast.emit('BroadCastExceptMe',{data:"HAVE A NICE DAY"});

結論:-これで、どちらが望ましいかは、ビジネス要件に完全に依存します。

于 2017-08-11T14:05:10.637 に答える
1

非常に簡単にするために、次の例を考えてみましょう。2つのクライアントクライアントAクライアントB、および クライアントによって発行された特定のイベントに応答して使用しているサーバーがあります。

socket.brodcast.emit()

クライアントAがイベントを送信するこの場合、サーバーはイベントをクライアントAに送り返しませんが、接続されている他のすべてのソケットにイベントを送信します。したがって、この場合、クライアントBのみがイベント応答を取得します

io.emit()

クライアントAはイベントを送信し、サーバーはクライアントAクライアントBの両方の接続されたすべてのソケットに応答イベントを送信します

于 2021-09-13T09:39:39.213 に答える