Socket.io 向客户端连接到的所有房间发送消息

Socket.io 向客户端连接到的所有房间发送消息,socket.io,socket.io-1.0,Socket.io,Socket.io 1.0,我使用的是socket.io版本1,我有以下问题 我有一个应用程序,用户可以连接到不同的房间。在断开连接事件中,我希望此用户通知他已离开所连接的房间。(我知道在断开连接时,用户会自动离开所有房间,但我想通知其他人用户离开了房间。) 我调查了一下,没有找到一个简单的方法来做我想做的事情。也许有更好的方法可以做到这一点,但目前我的解决方案是找到所有房间,并在一个循环中发送给每个房间中的所有人。但是,或适配器都不能给我客户端连接到的房间的列表 client.on('disconnect', funct

我使用的是socket.io版本1,我有以下问题

我有一个应用程序,用户可以连接到不同的房间。在断开连接事件中,我希望此用户通知他已离开所连接的房间。(我知道在断开连接时,用户会自动离开所有房间,但我想通知其他人用户离开了房间。)

我调查了一下,没有找到一个简单的方法来做我想做的事情。也许有更好的方法可以做到这一点,但目前我的解决方案是找到所有房间,并在一个循环中发送给每个房间中的所有人。但是,或适配器都不能给我客户端连接到的房间的列表

client.on('disconnect', function() {
   // io.sockets.manager.roomClients[client.id];
   // io.sockets.adapter.roomClients[client.id];
});
p.S.看到一个错误的答案,我想澄清一下。我知道如何向房间里的人发送信息。我想解决另一个问题。如果用户输入了
Room1
Room2
RoomN
,然后断开连接,我想向这些
N
房间中的所有人发送消息。

根据,您可以使用
socket.to('roomname').emit(…)
socket.in('roomname').emit(…)
。使用这些方法,您将向会议室中的所有客户端广播事件:

为后续事件发射设置修改器,该事件将仅广播到已加入给定房间的>套接字

例如:

io.on('connection', function(socket){
  socket.to('room').emit('an event', 'leaving the room, goodbye');
});

这是由本机socket.io API实现的。然而,有一些有用的公共特性必须在lib之上实现。您可能需要查看模块中的一些额外功能。

您可以找到客户端通过
Socket\rooms
对象()连接到的所有房间:

然后,您可以轻松地将消息以循环方式发送到这些房间中的每个房间

注意事项:
socket.join
方法是异步的,所以如果您有类似于:

socket.join('my room name');
console.log(socket.rooms);
它不会像预期的那样工作。相反,你应该写:

socket.join('my room name', function() {
    console.log(socket.rooms);
});
编辑:

如果要获取数组而不是对象,可以执行以下操作:

Object.keys(socket.rooms);

我想你还没有读过这个问题。我知道如何向房间里的所有人发送消息。如果一个客户进入了Room1,Room2,Room3,我想把这个消息发送给所有在这些房间里的人。好的,检查一下客户连接的所有房间。房间应该是解决方案。CuriousGuy已经回答了。所以你能删除你的答案吗,因为它没有回答这个问题?不幸的是,在发表这篇文章的时候,文档网站已经关闭了。不管怎样,您参考的文档都已过时。当前的
socket.rooms
似乎是一个对象而不是数组。然而,我们(可能)也有
socket.\u rooms
作为一个阵列在未来,尽管从现在开始不到一个月
socket.rooms
一直是的对象。@Nolo是的,这是一个对象,在写这篇文章时也是一个对象。谢谢你的提示。我编辑了我的帖子以使它更清晰
Object.keys(socket.rooms);