浏览器可以在关闭浏览器时执行 "on close" WebSocket 事件吗?
Can a browser execute "on close" WebSocket event when closing the browser?
当浏览器或选项卡关闭时,我有一个小片段向给定端点发送 XHttpRequest
以表示 WebSocket 连接已异常断开。
wsConnection.onclose = function(event) {
axios.post('/state', { reason: 'abnormal' });
};
是否保证浏览器会在 tab/window 关闭时执行事件?如果不是,那么如何检测“客户端强制断开连接”?
没有。您甚至不能保证您的 ajax 调用会被执行(例如崩溃或互联网连接中断)。
您应该在服务器端使用 client.ping()
来检测客户端是否有连接丢失。 WebSocket 客户端被 RFC 6455 强制响应服务器的 ping 请求。
如果状态代码是 1006,connection was closed abnormal。
当浏览器或选项卡关闭时,我有一个小片段向给定端点发送 XHttpRequest
以表示 WebSocket 连接已异常断开。
wsConnection.onclose = function(event) {
axios.post('/state', { reason: 'abnormal' });
};
是否保证浏览器会在 tab/window 关闭时执行事件?如果不是,那么如何检测“客户端强制断开连接”?
没有。您甚至不能保证您的 ajax 调用会被执行(例如崩溃或互联网连接中断)。
您应该在服务器端使用 client.ping()
来检测客户端是否有连接丢失。 WebSocket 客户端被 RFC 6455 强制响应服务器的 ping 请求。
如果状态代码是 1006,connection was closed abnormal。