【问题标题】:Access a shared worker from a dedicated worker从专用工作人员访问共享工作人员
【发布时间】:2014-06-30 23:01:55
【问题描述】:
是否可以在由同一主线程创建的专用工作人员中访问在主线程中创建的共享工作人员?我最初的想法是否定的,因为这可能会导致很多并发问题,但我对 WebWorkers 的内部没有完全了解,还没有做出明确的决定。
我的用例是让专门的工作人员与服务器打开一个 Web 套接字通道以检索流数据源。然后,这些数据将被发送到一个共享工作程序中,该工作程序将提供操作它的函数并通过可转移对象返回结果。我不想将这些对象组合成一个工作器,因为我希望能够插入不同的模块来进行数据操作,并且不想复制代码来与 Web 套接字通信。
【问题讨论】:
标签:
javascript
web-worker
【解决方案1】:
是否可以在由同一主线程创建的专用工作人员中访问在主线程中创建的共享工作人员?
是的。只需创建一个SharedWorker 作为子工作者(它将被共享),或者在共享工作者和专用工作者之间创建create a MessageChannel。
这可能会导致很多并发问题
没有。 Worker 间的通信是事件和异步的。
然后这些数据将被发送到一个共享工作器中,该工作器将提供操作函数
这听起来好像您不需要一个共享的工作人员。对于“提供功能”,加载到专用工作程序(进行 websocket 通信)的简单库就足够了。你甚至可以动态加载库,在工作进程中使用一些依赖管理。无需复制 web socket 代码。