socket.broadcast.to 不工作

Posted

技术标签:

【中文标题】socket.broadcast.to 不工作【英文标题】:socket.broadcast.to not working 【发布时间】:2018-02-15 17:24:02 【问题描述】:

我在 v2.0.3 的节点平台上使用 socket.io。

以下代码在一周前工作

socket.broadcast.to(msg.receiverID).emit('new message',  "username": msg.username, "message": msg.message, "to": msg.to, "receiverName": msg.receiverName, "senderName": msg.senderName, "dateTime": data.created );

它正在工作并将消息发送到单个receiverID。但现在即使我没有修改以前的代码,它也不起作用。但我们发现解决方案之一是尝试 io 对象发出消息,如下所述:

io.to(msg.to).emit('new message',  "username": msg.username, "message": msg.message, "to": msg.to, "receiverName": msg.receiverName, "senderName": msg.senderName ,"dateTime":data.created);

为什么这个冲突是 socket.broadcast.to() 在 io.to() 中被贬低或未使用。

【问题讨论】:

Whats the difference between io.sockets.emit and broadcast?的可能重复 也许你需要更新节点版本,是的,“io.to”也可以,socket.io/docs/emit-cheatsheet/# 【参考方案1】:

socket.broadcast.to(someRoomOrId).emit(...) 将发送到房间中的所有套接字或匹配除socket 之外的 ID。所以,如果你看到的是它没有被发送到socket,那么这就是它应该如何工作的。

如果要发送到所有匹配的套接字,请使用:

io.to(someRoomOrId).emit(...)

相反。 socket.to() 版本专门用于排除 socket 对象本身。这是socket.to() 的一些文档:

为后续事件发射设置一个修饰符,该事件将仅广播给已加入给定房间的客户端(套接字本身被排除)。

【讨论】:

以上是关于socket.broadcast.to 不工作的主要内容,如果未能解决你的问题,请参考以下文章

socketio 中 `socket.broadcast.to(param)` 的用途是啥

br.read() 如何在读取字符串结束时给出 -1 或 br.read() 究竟是如何工作的?

Replace(Environment.NewLine, "<br/>") 在网页上显示文本时未按预期工作

PHP array_pop 不工作

BR2_JLEVEL=2 在 Buildroot 中有啥作用?

将输入的 NewLines 转换为 <br /> 标签