SharedWorker界面代表一种特定类型的工作程序,可以从多个浏览上下文(例如,多个窗口,iframe甚至什至是worker)访问该工作程序。
对我来说,听起来好像SharedWorkers应该能够直接交换消息。但是,如果我尝试从另一个SharedWorker内部访问SharedWorker,即使用
var worker = new SharedWorker("path/to/file.js");
我懂了
ReferenceError:未定义SharedWorker
我只是误读了文档,还是有另一种方式来做到这一点?
尽管您似乎无法从共享工作器创建共享工作器,但是您可以通过在主线程中创建它们,并将一个MessagePort
对象传递给另一个对象来在它们之间进行通信。请注意,您必须将端口包括在传输列表参数中postMessage
:不能复制。
例如,在主线程中创建工作程序,并将其中一个的端口发送给另一个:
var myWorker1 = new SharedWorker("worker1.js");
myWorker1.port.start();
var myWorker2 = new SharedWorker("worker2.js");
myWorker2.port.start();
myWorker2.port.postMessage({worker1Port: myWorker1.port}, [myWorker1.port]);
在第一个工作进程中,您可以在端口上发送消息:
self.onconnect = function(e) {
var port = e.ports[0];
self.setInterval(function() {
port.postMessage('sent from worker 1');
}, 1000);
};
然后在第二个工作线程中,您可以保存传入的端口对象,并响应在其上收到的消息。
self.onconnect = function(e) {
var port = e.ports[0];
port.onmessage = function(e) {
var worker1Port = e.data.worker1Port;
worker1Port.onmessage = function(e) {
console.log('received in worker 2', e.data);
};
};
};
您可以在http://plnkr.co/edit/XTOej1b1PHfWuC9LHeZc?p=preview中看到此方法
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句