![](/img/trans.png)
[英]Socket.io - Cannot emit to a specific room but can emit to everyone
[英]NodeJS emit to specific room [socket.io]
看来我并不是唯一一个在这个问题上苦苦挣扎的人。
但是,我正在尝试编写一个简单的聊天应用程序。 用户加入会议室时,roomID将保存在socket.room.id中。 它只是个数字。
当他们加入/更改房间时,我有以下代码:
// Notify the rooms
if(previousRoomID) io.to(previousRoomID).emit("activity-notification","<b>"+socket.me.name+"</b> has left the room " + previousRoomID);
io.to(socket.room.id).emit("activity-notification","<b>"+socket.me.name+"</b> has joined the room " + socket.room.id);
现在,假设previousRoomID = 1
,而socket.room.id = 30
。
它发送消息,但它们似乎都发送给所有用户。 如果我在roomID 1中,并且用户离开了该房间,则会收到以下消息:
user has left the room 1
user has joined the room 30
我不应该看到第二条消息,因为在上面的代码中,我将其发送到io.to(socket.room.id).emit()
,但是即使我在房间1中,我也会收到此消息。
同样奇怪的是,即使我没有称呼它,它似乎也在使用广播功能。 像这样-将其发送给引发该事件的用户以外的所有用户。
我究竟做错了什么?
好吧,我知道了。 问题是我在打电话
socket.join(roomID)
但是我没有先离开房间。 因此,事实证明一个套接字可以连接多个房间,这可以解释为什么我同时看到这两个消息。
if(previousRoomID) socket.leave(previousRoomID);
socket.join(roomID)
if(previousRoomID) io.to(previousRoomID).emit("activity-notification","<b>"+socket.me.name+"</b> has left the room");
io.to(socket.room.id).emit("activity-notification","<b>"+socket.me.name+"</b> has joined the room");
虽然我不了解广播功能,但从理论上讲,消息应该发送给每个人,但是由于某种原因,调用io.to.emit
行的套接字没有收到activity-notification
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.