Я создаю базовый c сервис чата с использованием express и socket.io, и у меня возникла проблема, когда я могу присоединиться, но не могу покинуть комнату.
io.on('connection', (client) => {
client.on('login', (msg) => {
room_name = 'room'+msg.id
console.log('login', room_name);
var room = io.nsps['/'].adapter.rooms[room_name];
var numClients = room ? room.length : 0;
console.log('number of clients', numClients);
client.join(room_name)
});
client.on('logout', (msg) => {
room_name = 'room'+msg.id
console.log('logout', room_name)
var room = io.nsps['/'].adapter.rooms[room_name];
client.leave(room_name, function(err) {
var room_t = io.nsps['/'].adapter.rooms[room_name];
if (room_t) {
console.log("after leaving - room", room_t)
}
});
});
});
Из внешнего интерфейса я знаю, что испускаемые сокеты передаются правильно, потому что я получаю оба оператора логина консоли 'login' и 'logout'. Однако в client.on('logout')
я, похоже, не правильно покидаю комнату. Всякий раз, когда я смотрю в операторах журнала консоли количество клиентов в комнате, оно никогда не уменьшается, как я и ожидал после ухода. Далее, после проверки оператора console.log("after leaving - room", room_t)
, room_t
содержит всю старую информацию о комнате (показывая, что клиент фактически НЕ покинул комнату). Я получаю те же результаты, если я делаю client.leave(room)
и client.leave(room_name)
. (Я убедился, что имена комнат одинаковы как для входа, так и для выхода из системы)
Интересно то, что я могу покинуть комнату сразу после присоединения. Например, в client.on(login)
, если я присоединяюсь к комнате, то немедленно покидаю комнату, тогда у меня нет никаких проблем с этим. Не уверен, что там происходит.
Заранее спасибо!
Версии:
- Python 3.7.6
- узел v13. 12.0
- express 4.17.1
- гнездо. io@2.3.0