javascript - 如何从另一个线程向多个线程发送消息?

标签 javascript worker-thread

我有一个工作人员创建 MessageChannel 并将其中一个端口发送到主线程

// worker1.js
const { parentPort, MessageChannel } = require('worker_threads');

const { port1, port2 } = new MessageChannel();

port1.on('message', (msg) => {
  console.log(msg);
})

parentPort.postMessage(port2, [port2]);

第二种类型的工作人员只是接收 MessagePort 并将数据发送到端口

// sub_worker.js
const { parentPort, MessageChannel } = require('worker_threads');

parentPort.on('message',  (port) => {
  port.postMessage('some data')
});

主线程代码

// main thread
const { Worker } = require('worker_threads');

const mw = new Worker('worker1.js');
mw.on('message', (port) => {
  for (let i = 0; i < 5; i++) {
    const w = new Worker('sub_worker.js');
    w.postMessage(port, [port]);
  }
})

当我将一个 channel 发送给多个工作人员时,问题是错误的。

错误文本:DataCloneError: MessagePort in transfer list is already detached

最佳答案

如果其他人遇到这个问题:不可能按照您尝试的方式进行。 channel 是线程之间的一对一链接。所以你有两个选择:

  • 设置多个channel,每个worker一个,主线程需要给每个work单独发消息
  • 使用 Broadcast channel .这目前是实验性的。
  • 关于javascript - 如何从另一个线程向多个线程发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59505205/

    相关文章:

    JavaScript - 检测浏览器停止按钮点击

    c++ - Boost 线程特定存储问题 (boost/thread/tss.hpp)

    javascript - 如何全局替换 JavaScript 字符串中的正斜杠?

    javascript - 对多维数组中的 RGB 颜色进行排序

    java - Java中的工作线程可以调用主线程吗?

    node.js - 什么时候使用集群或 worker_threads 更好?

    node.js - 在electron应用中,当我使用worker_thread时,使用Command+Q退出应用后出现异常

    c++ - 如何将 LPARAM lParam 转换为 CString

    javascript - 仅当 3 个输入均未获得焦点时才运行 onblur 函数

    javascript - 使用 javascript 将类添加到 div 元素