5

メッセージ チャネルはシェアード ワーカーで機能しますか? 複数の共有ワーカー間で何らかのコミュニケーションを作成したいので、ここから例を挙げて、次のように変更します。

$(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.js と worker2.js:

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();
}

しかし、worker1 からメッセージを送信すると、worker2 でメッセージが受信されません。私は何か間違ったことをしていますか、それとも不可能ですか?ブラウザ タブにメッセージを投稿せずに 2 人の共有ワーカーと通信する他の方法はありますか?

4

0 に答える 0