如何在多个浏览器选项卡之间共享单个 WebSocket 连接?
我知道有多个建议 SharedWorker 的问题/帖子。然而,由于 SharedWorker 的采用率很低(根据撰写本文时我可以使用吗,全球只有 35%),这不是一个可行的解决方案,更不用说它已在 Safari 中被删除。
我已经使用 SerivceWorker 实现了一个工作版本,它具有一些 SharedWorker 的功能,可以跨选项卡共享单个连接。不幸的是,在测试过程中,我意识到 ServiceWorker 可以被浏览器杀死/停止,特别是当开发工具未打开时。我还知道一些解决方法可以防止这种行为,例如“定期 ping ServiceWorker”。我想问一下有没有合适的方法来处理这个问题
origin
,这是我多次遇到的问题。
共享 WebSocket
主动提出意见
*.wss.example.com
这样指向同一服务器的域,然后通过在每个选项卡上随机生成域来欺骗浏览器(类似于
) 3af893.wss.example.com
,a6a589.wss.example.com
,...)。通过这种模式,您可以建立无限的连接。请记住设置可靠的 CORS
策略,否则这种模式会让您面临大量恶意流量。尽管实施了许多上述解决方案,但我最终在生产中使用了这个解决方案,因为事实证明它更加稳定和可靠。此解决方案也适用于 Server Side Events
(
SSE
)。编辑1