我正在使用Express和www.example.com建立一个基本的聊天室服务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)
}
});
});
});
从前端,我知道socket发射正在正确传输,因为我得到了'login'和'logout'控制台日志语句。然而,在client.on('logout')
中,我似乎没有正确离开房间。每当我查看房间中客户端数量的控制台日志语句时,它似乎从未减少,正如我离开后所期望的那样。进一步,在检查console.log("after leaving - room", room_t)
语句后,room_t
包含了关于房间的所有旧信息(显示客户端实际上没有离开房间)。如果我执行client.leave(room)
和client.leave(room_name)
,我会得到相同的结果。(我已经确保room_names对于登录和注销都是相同的)
有趣的是,我可以在加入后立即离开房间。例如,在client.on(login)
中,如果我加入房间然后立即离开房间,那么我完全没有问题。不知道那里发生了什么。
先谢谢你了!
版本:
- 简体中文
- 节点v13.12.0
- express 4.17.1
- socket.iowww.example.com@2.3.0
2条答案
按热度按时间js5cn81o1#
这里的问题是,这是一个错误,这是更多的约8岁,socket.io从来没有费心修复。
你可以在这里看到一个git问题:https://github.com/socketio/socket.io/issues/463
客户端实际上已断开连接。
检查客户端的方法如下:
kokeuurv2#
试试这个: