Spawning a Shared Worker in a Dedicated Worker

后端 未结 1 619
余生分开走
余生分开走 2021-01-22 16:45

I\'m playing around with WebWorkers. Somehow I had the idea to let the different instances of a page know when another one is closed. Therefore I wrote a Shared Worker and it wo

相关标签:
1条回答
  • 2021-01-22 17:38

    You can't create a shared worker object in the dedicated worker. However, you can create a shared worker in the main UI thread and pass its port to the dedicated worker, so they can communicate directly.

    As an example, in main thread create both workers, and transfer the port object of the shared to the dedicated:

    var sharedWorker = new SharedWorker("worker-shared.js");
    sharedWorker.port.start();
    
    var dedicatedWorker = new Worker("worker-dedicated.js");
    dedicatedWorker.postMessage({sharedWorkerPort: sharedWorker.port}, [sharedWorker.port]);
    

    In the shared worker you can post messages on this port:

    self.onconnect = function(e) {
      var port = e.ports[0];
    
      self.setInterval(function() {
        port.postMessage('sent from shared worker');
      }, 1000);
    };
    

    And in the dedicated you can react to them

    self.onmessage = function(e) {
      var sharedWorkerPort = e.data.sharedWorkerPort;
      sharedWorkerPort.onmessage = function(e) {
        console.log('received in dedicated worker', e.data);
      };
    };
    

    You can see this working at http://plnkr.co/edit/ljWnL7iMiCMtL92lPIAm?p=preview

    0 讨论(0)
提交回复
热议问题