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.IO Wiki 帖子将帮助每个阅读这个问题的人:

最近的备忘单也可以在这里查看:

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

在这里,每个 Socket 都会收到包含Initiator的消息。

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

场景:2:- 通过使用socket.broadcast.emit 详图 :-socket.broadcast.emit

在这里,每个 Sockets 都收到消息,除了一个,即Initiator

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

结论:- 现在完全取决于我们的业务需求,哪个更可取。

于 2017-08-11T14:05:10.637 回答
1

为简单起见,请考虑以下示例:有 2 个客户端 client Aclient B和我们正在使用的服务器 来响应客户端发出的某些事件。

socket.brodcast.emit()

客户端 A发送事​​件 在这种情况下,服务器不会将事件发送回客户端 A,但会将事件发送到所有其他连接的套接字。所以在这种情况下,只有客户端 B会得到事件响应

io.emit()

客户端 A 发送事​​件,服务器会将回复事件发送到客户端 A客户端 B的所有连接的套接字

于 2021-09-13T09:39:39.213 回答