io.sockets.emitとbroadcastの違いは何ですか?


98

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
});

回答:


174

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

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

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


22
それを理解するには、3時間のトラブルシューティングが必要でした。
Petrogad 2014

これが実際に動作していることを確認できますが、GithubのドキュメントやSocket.ioのWebサイト、socket.broadcastsocket.broadcast.emitのドキュメントがありません。何か不足していますか?(そしてwikiは消えました)
scipilot

1
この点でさらに優れているのは、サンプルの「チャット」アプリケーションがほとんど排他的に使用しているのsocket.broadcast.emitに対して、そのAPIはどこにも文書化されていないということです。
Avi Cherry

@Sobiaholic現在の接続に変更を送信しないという明白な理由はまだありません。イベントをトリガーしたクライアントが事前に楽観的な更新をすでに行っていたときのためですか?
Nick Pineda

2
これは「新しく作成された接続を除く」ではなく、「それ自体を除く他のすべてのクライアントに対する」ものでなければなりません。新しく作成した接続(クライアントがチャットルームに参加する)を使用socket.broadcast.emitして、を使用してメッセージを送信すると、メッセージは受信されますが、あなたは受信されません。
NiCkニューマン

47

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


6
もう1つの更新-Jayanthaの回答と私の独自の分析によれば、新しく作成された接続、つまり「ソケット」が作成された後に作成された新しいクライアント接続には送信しません。これは重要で重要な違いです!!
Anmol Saraf 2013

6
「新しく作成された接続」と呼ばれるJayanthaは、接続イベントが処理され、ブロードキャストを発行するソケットです。ブロードキャストのポイントは、「ブロードキャスト」ソケットを除くすべてのクライアントに送信されることです。クライアント接続が確立された順序に違いはありません。
セミコロン2014年

8

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

ここで、すべてのソケットがInitiatorを含むメッセージを取得します。

  // 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"});

結論:-どちらが望ましいかというビジネス要件に完全に依存します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.