socket.io как проверить, что комната пуста при отключении - PullRequest
0 голосов
/ 06 августа 2020

Я создал службу сокетов, когда я вхожу в систему, я присоединяюсь к комнате по 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, но мне нужно подождать. Как я могу это сделать и не нужно ждать. Спасибо за помощь.

...