Chrome:解决有限数量的WebSockets(可能使用localStorage)

时间:2016-01-25 18:10:41

标签: javascript html5 google-chrome websocket local-storage

根据这篇文章ListMultimap from Guava以及我做的一些测试来验证限制是否真实 - 我明白我可以打开的WebSockets数量有限。

问题是我有时需要超过30个websockets,因为用户可能会打开30个标签。

我想知道在不同标签之间共享webSocket池的最佳方法是什么。以下是我想到的一些想法,我很想听听其他可能的想法:

  1. 在一个主窗口中分配webSocket池,作为全局可访问的元素,然后确保所有其他选项卡都是该主页的子项。然后我可以使用标签间通信:

    window.parent...

  2. 问题是并非所有选项卡都是作为主窗口的子窗口创建的,并且主窗口可能已关闭。

    1. 以某种方式“在本地存储中”分配webSocket池 - 我不太熟悉本地存储,但我认为至少它可以以某种方式保存对当前管理webSockets的主选项卡的引用。每隔一段时间,其他标签会尝试将自己设置为主标签。
    2. 我知道这听起来很糟糕而且很麻烦。但是,在访问本地存储时,如何编写线程/进程安全代码?任何例子都将不胜感激。

      1. 很想听到你可能有的任何其他建议。

1 个答案:

答案 0 :(得分:1)

Number 2不起作用,因为LocalStorage仅限于字符串类型。

我会推荐looking at ServiceWorkers

  

单个服务工作者可以控制许多页面。每次加载作用域中的页面时,都会针对该页面安装服务工作程序并对其进行操作。

这听起来非常接近你想要的。注册一个ServiceWorker,它只接受消息并将它们重新广播给客户 - 您域中的任何页面。因此,您可以拥有一个创建WebSocket连接的主页面,每次获取推送时,它都会通过ServiceWorker消息传递系统广播消息。其他标签可以根据需要选择它。

或者,您可以按照相同的原则使用shared WebWorker。只需将其安装为从WebSocket广播消息的消息传递系统。

这些并不完全是这些技术的预期用途......但如果它有效则可行。