gpt4 book ai didi

javascript - 从 SharedWorker 向 SharedWorker 发送消息

转载 作者:行者123 更新时间:2023-11-30 16:49:48 26 4
gpt4 key购买 nike

MDN Documentation on SharedWorkers状态:

The SharedWorker interface represents a specific kind of worker that can be accessed from several browsing contexts, such as several windows, iframes or even workers.

对我来说,这听起来好像 SharedWorkers 应该能够直接交换消息。但是,如果我尝试从另一个 SharedWorker 中访问一个 SharedWorker,即使用

var worker = new SharedWorker("path/to/file.js");

我明白了

ReferenceError: SharedWorker is not defined

我只是误读了文档,还是有其他方法可以做到这一点?

最佳答案

虽然你似乎无法从共享 worker 创建共享 worker ,但你可以通过在主线程中创建它们,并将其中一个的 MessagePort 对象传递给它们来实现它们之间的通信另一个。请注意,您必须将端口包含在 postMessage 的传输列表参数中:它不能被复制。

例如,在主线程中创建worker,并将其中一个的端口发送给另一个:

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]);

在第一个 worker 中,您可以在端口上发送消息:

self.onconnect = function(e) {
var port = e.ports[0];

self.setInterval(function() {
port.postMessage('sent from worker 1');
}, 1000);
};

然后在第二个 worker 中,您可以保存传入端口对象,并响应在其上收到的消息。

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 看到这个工作

关于javascript - 从 SharedWorker 向 SharedWorker 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30700295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com