关闭浏览器时,浏览器可以执行“关闭”WebSocket 事件吗?

Posted

技术标签:

【中文标题】关闭浏览器时,浏览器可以执行“关闭”WebSocket 事件吗?【英文标题】:Can a browser execute "on close" WebSocket event when closing the browser? 【发布时间】:2021-05-13 21:34:38 【问题描述】:

当浏览器或选项卡关闭时,我有一个小型 sn-p 向给定端点发送 XHttpRequest 以表示 WebSocket 连接已异常断开。

wsConnection.onclose = function(event) 
  axios.post('/state',  reason: 'abnormal' );
;

是否保证浏览器将在选项卡/窗口关闭时执行事件?如果不是,那如何检测到“客户端被强行断开”?

【问题讨论】:

【参考方案1】:

没有。您甚至无法保证您的 ajax 调用已执行(例如崩溃或互联网连接中断)。

您应该在服务器端使用client.ping() 来检测客户端是否有连接丢失。 RFC 6455 强制 WebSocket-Clients 响应服务器的 ping 请求。

如果状态码是 1006,connection was closed abnormal。

【讨论】:

以上是关于关闭浏览器时,浏览器可以执行“关闭”WebSocket 事件吗?的主要内容,如果未能解决你的问题,请参考以下文章

浏览器窗口意外关闭时发出警报

js监听浏览器页面的关闭

js监听浏览器页面的关闭

关闭浏览器时如何在队列中执行非常繁重的任务(在后台运行)?

监听浏览器关闭事件

js 监听浏览器刷新还是关闭事件