网络工作者或类似的东西可以处理 window 关闭事件吗?

Can a web worker or something similar handle window close events?

我正在开发一个项目,该项目会让用户打开每个连接到 PubNub 频道并侦听事件的选项卡。然后,这些打开的选项卡显示在管理选项卡中,这样用户就可以看到所有已连接的选项卡。目前,我们正在使用它们的存在来查看谁已连接,这也会触发显示加入、离开和超时消息的消息。

问题归结为如果用户只是关闭一个选项卡,我无法向频道发送取消订阅消息,因此我必须等待 PubNub 在该连接上调用超时以将其从管理中删除标签。我已经将他们的心跳选项调整得更短了,但是当这些连接关闭时,如果能将心跳选项设置得更短一点就更好了。

我的想法可能是 Web Worker 或类似的东西,可能会产生简单的处理发送取消订阅消息,但据我所知,如果父级 Web Worker 变得不可用,这似乎是不可能的产生它的页面被关闭了?

有没有办法做这样的事情,或者我最好的选择是让超时生效并处理管理器选项卡,等待超时被调用?

PubNub 和浏览器 Window/Tab 关闭事件

WebWorker 可能是一个选项,但它高度依赖于浏览器。如果您不担心浏览器依赖性,那么您可以依靠浏览器对 sendBeacon 或 onbeforeunload 事件的支持来取消订阅。

但是您也可以在您的 Presence 插件上为您的 PubNub 密钥启用 TCP_FIN,这将在卸载选项卡时发送一个离开事件。不过要小心,因为如果您订阅了很多频道,这可能会导致页面卸载性能问题,因为这是一个阻塞调用。