如何在断开连接时获得当前的插座空间?

时间:2015-12-04 16:40:01

标签: javascript node.js sockets socket.io

在socket.io 1.3.7上,如何在断开连接事件时获取套接字的空间?

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

3 个答案:

答案 0 :(得分:1)

我通过在连接上设置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);
   });
}

答案 1 :(得分:0)

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

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 同名的房间中。

答案 2 :(得分:-1)

房间已经离开“断开连接”事件,使用“断开连接”事件,该事件将在“断开连接”事件发生之前发出,此时房间仍然可以访问。

它的工作原理如下:

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');
    });
});