node.js - 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 中完美地工作?
解决方案
推荐阅读
- javascript - 来自@azure/msal-browser 的 loginPopup 无法在 Microsoft Teams 桌面应用程序上运行
- c# - 是否有任何 NuGet API 可以从 Visual Studio 扩展项目创建包
- python - Python 3.8 中的 list 和 List 有什么区别
- python - 正则表达式可防止仅包含相同字符的电子邮件
- python - 如何使用正则表达式替换字符串?
- wso2 - 重用以前 WSO2AM 版本的现有应用程序令牌
- testing - 如何调试自定义 mocha 测试报告器?
- python - 如何使用Python遍历文件夹中以特定行开头和结尾的每个excel文件
- javascript - React javascript:SetState()不强制重新渲染
- java - 无法使用“保存”方法 JPA 保存布尔值