浏览器可以在关闭浏览器时执行 "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