我创建了一个套接字服务,当我登录时,我将通过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
,但是我需要等待。我该怎么办,不需要等待。谢谢您的帮助。