【问题标题】:How to get current room of socket on disconnect?如何在断开连接时获取当前的套接字房间?
【发布时间】:2016-03-09 16:06:30
【问题描述】:

socket.io 1.3.7,如何在断开事件时获取socket的房间?

socket.on('disconnect', function() {
    var currentRoom = ???
    socket.broadcast.in(currentRoom).emit('user:left', socket.id);
});

【问题讨论】:

    标签: javascript node.js sockets socket.io


    【解决方案1】:

    房间在 'disconnect' 事件时已经离开,使用将在 'disconnect' 事件发生之前发出的 'disconnecting' 事件,而房间仍然可以访问。

    它是这样工作的:

    socket.on('disconnecting', function(){
        var self = this;
        var rooms = Object.keys(self.rooms);
    
        rooms.forEach(function(room){
            self.to(room).emit('user left', self.id + 'left');
        });
    });
    

    【讨论】:

      【解决方案2】:

      我通过在连接时设置 currentRoomId 变量解决了我的问题,因此我可以在断开连接时访问它。

      io.sockets.on('connection', function(socket) {
          var currentRoomId;
          socket.on('join', function(roomId) {
            socket.join(roomId);
            currentRoomId = roomId;
          });
      
         socket.on('disconnect', function() {
           socket.broadcast.in(currentRoomId).emit('user:left', socket.id);
         });
      }
      

      【讨论】:

      • 对此有一个改进的答案,无需将房间 ID 存储到变量中。请参阅下面的答案。
      【解决方案3】:

      您可以在开始时跟踪全局声明数组中的所有套接字,然后在断开连接事件时检查该数组的索引。像这样的:

      var allClients = [];
      
      io.sockets.on('connection', function(socket) {
          allClients.push(socket);
      
          socket.on('disconnect', function() {
              // this is your leaving Socket object
              var index = allClients.indexOf(socket);
              var leaving_socket = allClients[index];
      
              // this is the way to get the rooms in 1.3.7
              console.log(leaving_socket.rooms);
          }
      }
      

      您可以查看文档here

      编辑

      leaving_socket.rooms 当然是一个数组而不是字符串,因为一个套接字可以同时在多个房间中。这意味着您将不得不遍历该数组并找到您正在寻找的那个。套接字也始终位于与套接字的 id 同名的房间中。

      【讨论】:

        猜你喜欢
        • 2019-04-06
        • 2013-10-03
        • 2014-11-07
        • 1970-01-01
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        • 1970-01-01
        • 2016-04-09
        相关资源
        最近更新 更多