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