根据这篇文章ListMultimap from Guava以及我做的一些测试来验证限制是否真实 - 我明白我可以打开的WebSockets数量有限。
问题是我有时需要超过30个websockets,因为用户可能会打开30个标签。
我想知道在不同标签之间共享webSocket池的最佳方法是什么。以下是我想到的一些想法,我很想听听其他可能的想法:
在一个主窗口中分配webSocket池,作为全局可访问的元素,然后确保所有其他选项卡都是该主页的子项。然后我可以使用标签间通信:
window.parent...
问题是并非所有选项卡都是作为主窗口的子窗口创建的,并且主窗口可能已关闭。
我知道这听起来很糟糕而且很麻烦。但是,在访问本地存储时,如何编写线程/进程安全代码?任何例子都将不胜感激。
答案 0 :(得分:1)
Number 2不起作用,因为LocalStorage仅限于字符串类型。
我会推荐looking at ServiceWorkers。
单个服务工作者可以控制许多页面。每次加载作用域中的页面时,都会针对该页面安装服务工作程序并对其进行操作。
这听起来非常接近你想要的。注册一个ServiceWorker,它只接受消息并将它们重新广播给客户 - 您域中的任何页面。因此,您可以拥有一个创建WebSocket连接的主页面,每次获取推送时,它都会通过ServiceWorker消息传递系统广播消息。其他标签可以根据需要选择它。
或者,您可以按照相同的原则使用shared WebWorker。只需将其安装为从WebSocket广播消息的消息传递系统。
这些并不完全是这些技术的预期用途......但如果它有效则可行。