socket.io broadcast.emit的广播问题。求大神请教。
发布于 9 年前 作者 forkingli 10095 次浏览 最后一次编辑是 8 年前 来自 问答

求大大指教啊! 首先问一个问题socket.broadcast.emit是广播给所有在线客户端还是除自己以外所有在线客户端? 如果我想广播给出自己以外的客户端应该怎么办? 如果socket.broadcast.emit就是广播给出自己以外的客户端,那么各位大大们,看一下我的程序哪出错了?为什明明是广播给其他用户的消息为什自己还会收到? QQ截图20151020090520.png QQ截图20151020090538.png QQ截图20151020090805.png client.png 这里的是客户端的代码 server.png 后台的socket.broadcast.emit(‘otherUserLogin’, socket.id);如果是广播给其他在线用户,那么我当前连接前台的 socket.on(‘otherUserLogin’,function(data){ console.log(‘other user login’); $msg.text(‘用户:’+data+‘登录!’); });老是被触发,不是说好的广播给其他在线用户么?为毛自己还会收到啊? 求解答啊?小弟在这给跪了。

15 回复
  • 广播组,自己在这个组里面当然也能收到。
  • 直接在客户端屏蔽掉自己发来的那条消息不就行了

只看的话也看不出什么问题 ,,,,看看客户端和服务端的socket Io版本号对不对得上

@hanyuzhou2006 socket.broadcast.emit不是广播给其他客户端吗?那应该不会传给当前连接对象啊?如何求解?

@xZGit 我刚刚更新了版本还是一样。 new.png

@xZGit 首先先确认一下socket.broadcast.emit是广播给出自己以外的其他连接客户端吧?我现在对它表示特别怀疑?

@forkingli 也就是socket.broadcast.emit的广播也包括自己咯?

@hanyuzhou2006 如果是的话那就能理解,网上一大堆都说不包括自己,纠结好久,所以说在自己的客户端筛选掉就行了?有没有更好的方法。

把这些无关紧要的逻辑给客户端处理,就是很好的办法了

@forkingli 我自己测试的socket.broadcast.emit 是没问题的 你可以把代码贴出来 不要截图 。。。我运行一下

  • 刚刚测试了一下,broadcast不包括自己
  • 你这里之所以会发送给自己,是因为你改掉了后台socket的id

@hanyuzhou2006 卧槽?真神了,小弟给跪了,真心谢了。

@hanyuzhou2006 求教哪里有比较全和新的socket.io api或教程,覆盖id什么的真没想到。

官方文档其实足够了,像那个socket.id由于是它的内部变量,按理说不该修改,但javascript无法阻止你去做这件事情(得不偿失),所以在没有读懂它的源码之前不建议对其变量做修改。

@hanyuzhou2006 真是没想到,还得学啊,话说这位仁兄现在工作了吗?

@xZGit 已经解决了,socket.io的id属性是内部属性,覆盖的话,广播就会广播到自己。。。。。

回到顶部