Javascript 共享worker中的消息通道
消息通道在共享工作人员中工作吗?我想在几个共享工作人员之间建立某种形式的沟通,因此我从中选取了一个示例,并将其更改为:Javascript 共享worker中的消息通道,javascript,message,web-worker,Javascript,Message,Web Worker,消息通道在共享工作人员中工作吗?我想在几个共享工作人员之间建立某种形式的沟通,因此我从中选取了一个示例,并将其更改为: $(function() { var worker1 = new SharedWorker("worker1.js"); var worker2 = new SharedWorker("worker2.js"); var channel=new MessageChannel(); worker1.port.start(); worker2.port.start(); w
$(function() {
var worker1 = new SharedWorker("worker1.js");
var worker2 = new SharedWorker("worker2.js");
var channel=new MessageChannel();
worker1.port.start();
worker2.port.start();
worker1.port.onmessage = function(e) {
$("#log").append("<br>" + e.data);
console.log(e.data);
}
worker1.port.postMessage({
code : "start",
msg : "ping"
},[channel.port1]);
worker2.port.onmessage = function(e) {
$("#log").append("<br>" + e.data);
console.log(e.data);
}
worker2.port.postMessage({
code : "start",
msg : "ping"
},[channel.port2]);
/*channel.port1.postMessage("channel port1 msg");
channel.port1.onmessage=function(e){
$("#log").append("<br> port1 recieved msg : " + e.data);
console.log(e.data);
}*/
$("#send1").click(function() {
var msg = $("#msg").val();
if (msg && msg != "start")
worker1.port.postMessage({
code : "msgw",
msg : "ping2"
});
$("#msg").val("");
})
$("#send2").click(function() {
var msg = $("#msg").val();
if (msg && msg != "start")
worker2.port.postMessage({
code : "msgw",
msg : "ping3"
});
$("#msg").val("");
})
$("#send3").click(function() {
var msg = $("#msg").val();
if (msg && msg != "start")
worker1.port.postMessage({
code : "msgch",
msg : "ping3"
});
$("#msg").val("");
});
$("#send4").click(function() {
var msg = $("#msg").val();
if (msg && msg != "start")
worker2.port.postMessage({
code : "msgch",
msg : "ping3"
});
$("#msg").val("");
})
});
但是当我从worker1发送消息时,我在worker2中没有收到它。我是做错了什么还是不可能做?有没有其他方法可以在不将消息发布到浏览器选项卡的情况下与两个共享工作人员进行通信?可能存在重复的消息
var channelPort;
function getChannelMessage(e){
postMessage(e.data+" >> channel recieved msg in worker1 ");
}
self.onconnect = function(e){
var port = e.ports[0];
port.onmessage = function(e) {
if (e.data.code == "start") {
channelPort = e.ports[0];
channelPort.start();
channelPort.postMessage(e.data.msg+" >> worker1 channel post");
channelPort.onmessage = getChannelMessage;
} else if(e.data.code=="msgw")
{
port.postMessage(e.data.msg+" >> worker1 got msg");
}else if(e.data.code=="msgch")
{
channelPort.postMessage(e.data.msg+" >> worker1 got msg");
}
};
port.start();
}