io.sockets.emit和broadcast有什么区别?

swi*_*cki 91 node.js socket.io

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
});
Run Code Online (Sandbox Code Playgroud)

Jay*_*ena 163

io.sockets.emit 将发送给所有客户

socket.broadcast.emit 将消息发送到除新创建的连接之外的所有其他客户端

这个Socket.IO Wiki帖子将帮助每个人阅读这个问题:

  • 好吧,花了3个小时的麻烦射击才弄明白. (19认同)
  • 它不是“除了新创建的连接”,它应该是“除自身之外的所有其他客户端”。你可以有一个新创建的连接(一个客户端加入聊天室),然后你使用 `socket.broadcast.emit` 发送一条消息,他们会收到它,而不是你。 (3认同)

Kar*_*Rao 44

socket.broadcast.emit()行为类似于io.sockets.emit,但不是发射到所有连接的套接字,它将发射到所有连接的套接字,除了它被调用的套接字.因此,在这种情况下,引用的套接字socket将不会收到该事件.

  • 还有一个更新 - 根据Jayantha的回答和我自己的分析,它也不会向新创建的连接发出,即在创建"套接字"之后创建的新客户端连接.这是一个重要且关键的区别!! (6认同)
  • Jayantha引用的"新创建的连接"是正在处理其连接事件的套接字,以及谁将发出广播.广播的意义在于它除了"广播"套接字之外还传递给每个客户端 - 建立客户端连接的顺序没有区别. (5认同)

Ans*_*ish 7

方案:1: -通过使用io.sockets.emit 详细图解:-io.sockets.emit

这里每个Socket获取消息,包括启动器.

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

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

这里每个套接字都会收到消息,除了一个启动器.

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

结论: - 现在,完全取决于我们的业务需求,哪一个更受欢迎.