首页 > 解决方案 > NodeJS广播频道仅以一种方式工作

问题描述

我有一个高级服务器,尽可能控制多个 API 和线程。

有2个主线程,一个threadHub * uiThread。

他们正在使用广播频道进行交流。

var bc = new BroadcastChannel('main', {
   type: 'node',
   webWorkerSupport: true
 })

threadHub 使用它来获取所有消息,并将其发送到正确处理它的函数。它成功接收所有发出的消息。

bc.onmessage = (event) => {
    var data = event.data;
    include.threading.getData(data);
};

uiThread 使用相同的方法,但从不接收任何消息,甚至是来自自己的消息。

bc.onmessage = (event) => {
  var temp = event.data;
  print(`DATA: ${temp}`)// print calls a seperate function where the data is sent to the threadHub which controls STDOUT and logs it. This function does work.
  var buffer = temp.split("|");
  var threadId = buffer[0];
  var dataType = buffer[1];
  var data = buffer[2];
  if (!threadId == "-1") return 1;
  switch (dataType) {
    case "log": {
      debug = debug + data;
      break;
    }
  }
};

所有消息都使用bc.postMessage(`0|${text}`)

BroadcastChannel 在这里定义:

const {
  Worker, SHARE_ENV, isMainThread, parentPort, workerData, BroadcastChannel
} = require('worker_threads');

所以我的问题是为什么bc.onmessage不能在 uiThread 中工作但在 threadHub 中完美地工作?

标签: node.js

解决方案


推荐阅读