socket.io断开时如何检查房间是否空

时间:2020-08-06 14:35:30

标签: sockets socket.io

我创建了一个套接字服务,当我登录时,我将通过socket.id加入一个会议室,如果我打开很多标签,则那些socket.id将加入同一会议室。关闭标签,此socket.id将离开房间。我要检查房间是否空着并触发删除redis键。这是我的代码

const server = require('http').Server();
const io = require('socket.io')(server);

let socket_room = {};
let socket_room_countdown_id = {};

io.sockets.use(function (socket, next) {
  // jwt auth
}).on('connection', function(socket) {
  socket.on('join', (data) => {
    const roomName = `${data.group}:${data.account}`;
    socket.join(roomName);
    socket_room[socket.id] = roomName;

    ...

  });

  socket.on('disconnect', () => {
    const roomName = socket_room[socket.id];
    const room_countdown_id = socket_room_countdown_id[socket.id];
    clearInterval(room_countdown_id);
    delete socket_room[socket.id];

    setTimeout(() => {
      const room = socket.adapter.rooms[roomName];
      if (typeof room === 'undefined')  {
        _redis.get(`prefix:${roomName}`, function(error, result) {
          if (error) {
            console.log(error);
          } else {
            _redis.del(`prefix:${roomName}`);
          }
       })
      }
    }, 30000);
  });

});

如果我重新加载页面,则断开连接总是触发,并且我写了setTimeout,但是我需要等待。我该怎么办,不需要等待。谢谢您的帮助。

0 个答案:

没有答案
相关问题