据我所知,HTML5共享Web工作者的最大好处是他们可以在一个单独的执行线程中接受多个连接。
我的问题是:有没有人与SharedWorker建立多个连接,以便与Google Chrome一起作为一个线程使用?我使用的是最新版本12.0.742.112。
演示:http://demos.zulius.com/html5/sharedworker
来源(如果演示已关闭):index.html,sharedworker.js
该演示建立了2个独立的事件监听器。预期的输出是:
foo got message: Hello World! You are connection #1
bar got message: Hello World! You are connection #2
在演示中,两个事件侦听器都正确触发,但未在SharedWorker脚本中维护连接计数变量。这使我相信每个与SharedWorker的连接都在一个单独的线程中执行。
我做错了吗?或者Chrome对SharedWorker的支持不是很好吗?
更新:该演示现在有效。
答案 0 :(得分:2)
你有2个听众,但你只启动了一次工作者,所以1个工作者由1个所有者而不是2个所有者共享。增加侦听器的数量不会影响所有权。
您可以在此处查看示例: http://weblog.bocoup.com/javascript-web-workers-chrome-5-supports-new-sharedworker
它有2个框架,一个包含iframe,一个在iframe内。它们都调用了Worker的start
方法,因此它由2个所有者共享。由于start
方法被调用两次,onconnect
事件应该被触发两次,从而使connection.count
等于2.
答案 1 :(得分:0)
在共享Web工作者中,上下文一直存在,直到最后一次浏览器会话结束。共享Web工作者可以维护浏览器选项卡周围的上下文。他们使用相同的数据上下文来响应请求。
数据上下文的更改将影响所有连接,您可以通过单个上下文更改来更新所有连接,您可以将数据维护到最后一个连接结束。您可以在所有视图中维护连接更改。
以下是具有多个连接的共享Web工作者的演示。