【问题标题】:NodeJS emit to specific room [socket.io]NodeJS 发射到特定房间 [socket.io]
【发布时间】:2018-05-07 05:28:44
【问题描述】:

看来我不是唯一一个在这个问题上苦苦挣扎的人。

但是我正在尝试编写一个简单的聊天应用程序。当用户加入房间时,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 = 1socket.room.id = 30

它发送消息,但它们似乎都发送给所有用户。如果我在 roomID 1 中,并且用户离开了房间,我会收到以下消息:

user has left the room 1
user has joined the room 30

我不应该看到第二条消息,因为在上面的代码中我将它发送到io.to(socket.room.id).emit(),但即使我在 1 号房间,我也会收到这条消息。

也很奇怪,它似乎也在使用广播功能,尽管我没有调用它;如 - 它将它发送给除触发事件的用户之外的所有用户。

我做错了什么?

【问题讨论】:

    标签: node.js socket.io


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 2013-08-01
      • 2018-03-03
      • 2013-07-12
      相关资源
      最近更新 更多