在我的Node应用程序中,我正在使用socket.io
websocket功能。
为了让客户端知道服务器何时不可用,我使用以下代码:
socket.on('disconnect', function(){
//show error to client
});
效果很好,但有讨厌的副作用。每次我单击链接以离开页面(或只是重新加载页面)时,都会弹出该消息-因为客户端断开了连接。我当然不希望每次访问者单击链接时都显示一条消息,说“服务器不可用”。
我可以在错误消息上设置超时,使浏览器有时间在错误显示之前简单地离开。但是您会承认这是一个破旧的解决方案。另外,将有两个问题:
1)如果需要实际显示错误消息,则该错误消息将被超时量延迟,从而使用户的应用程序无法正常运行,并且在此间隔内没有任何通知
2)它不适用于页面重新加载(我认为)
无论如何,总有一种更好的方法。对?
注意:这是Firefox中的问题,但不是Chrome。尚未测试其他浏览器。Firefox还在控制台中显示一条错误消息,指出websocket连接已中断,我倾向于认为这两个问题是常见原因。我已经阅读了很多有关此控制台错误的问题和答案,但似乎没有一个适用于我的情况。
我以前碰到过这个。
您想知道用户何时离开页面,并且不想弹出错误。
用于onbeforeunload
在他们离开时发出信号,然后只需设置一个布尔值,以使socket.io不会触发错误。
window.onbeforeunload = function(){
window.unloading = true;
return; // don't return a string here or it will pop up asking user if they want to navigate away.
}
socket.on('disconnect', function(){
// setTimeout might be optional depending on when onbeforeunload is called
setTimeout(function(){
if (!window.unloading)
//show error to client
}, 10); // 10 ms should be long enough for onbeforeunload, and short enough so your real disconnects don't wait
});
用户尝试离开时,在调用卸载之前打开。
通常,它用于调用一条消息,询问用户是否希望离开,但是您可以设置一个变量,表明断开连接没有错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句