[英]Sending messages from SharedWorker to SharedWorker
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中看到此方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.