【发布时间】:2022-02-13 11:30:58
【问题描述】:
我有以下删减代码:
io.on('connection', function(client) {
client.uuid = uuid.v4();
// add client object to server...
console.log('socket.io:: client connected ' + client.uuid );
client.on('disconnect', function() {
console.log('socket.io:: client disconnected ' + client.uuid );
// remove client object from server...
});
});
如果我在浏览器中打开此页面,一切似乎都很好。如果我刷新页面,它将触发disconnect,然后触发connection。但是,如果我刷新得足够快,有时disconnect 不会被调用,因此客户端数据不会从服务器中清除。有什么办法可以避免这种情况吗?
编辑:改写reconnect -> connection
【问题讨论】:
-
无法保证浏览器有时间向服务器发送请求,无论是使用 ajax 还是套接字。浏览器不等待任何人,它会重新加载/重定向,并且您不能停止或延迟它(因为这对用户来说真的很烦人)
-
修复通常是从服务器轮询,看看用户是否仍然存在,socket.io 会自动通过心跳执行此操作,并且可能有一个
leave或unsubscribe事件服务器端当客户端没有响应时触发 -
如果刷新太快,
reconnect是否会发生?我不这么认为.. -
您可以通过打开节点调试来弄清楚孤立连接会发生什么
-
我将服务器打开了一会儿,我看到在大约 30-60 秒后我看到
disconnect事件触发。 @adeneo 你想把你的评论写成答案让我接受吗?
标签: javascript socket.io