【问题标题】:Iterate through rooms for a given socket遍历给定套接字的房间
【发布时间】:2019-06-23 03:03:29
【问题描述】:

我想确保我的客户只能加入一个房间。为此,我想遍历服务器上的 socket.rooms 并为每个房间调用 leave。如下所示:

//Pseudo code//
for each room in socket.rooms {
    socket.leave(room)
}

谢谢

【问题讨论】:

    标签: socket.io


    【解决方案1】:
    Object.keys(socket.rooms).forEach(function(roomName){
        socket.leave(roomName) // this removes user from all of the existing rooms 
    });
    

    在这里,我们通过运行一个数组来获取客户所在的房间,然后将他从循环中的所有房间中删除

    【讨论】:

    • 感谢您的快速回复。我假设因为所有套接字都会自动加入由套接字 ID 标识的默认房间,所以您只想忽略列表中的第一个房间,只留下任何后续房间?
    • 那种。我想在加入另一个房间之前将用户踢出所有现有房间。所以我假设我只是在上面的示例中调用了 socket.leave(roomName) 并删除了条件语句。
    【解决方案2】:

    Socket io 房间是成套保存的,所以你应该使用Array.from()。示例

     Array.from(socket.rooms).forEach((roomId) => {
          socket.leave(roomId);
     });
    

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 2017-07-25
      相关资源
      最近更新 更多