如何在Node.js中的两个工作线程之间创建直接通信通道

如何在Node.js中的两个工作线程之间创建直接通信通道,node.js,multithreading,threadpool,worker-thread,Node.js,Multithreading,Threadpool,Worker Thread,有没有办法在两个工作线程之间使用newmessagechannel创建直接通信通道?例如:有一个主线程P,我使用worker\u线程API创建了它,它创建了两个worker线程W1和W2 P -> W1 -> W2 我想直接启用W1和W2之间的通信,而不是使用parentPort通过p来生成双向通信通道 index.js const { Worker } = require('worker_threads'); const path = require('path');

有没有办法在两个工作线程之间使用
newmessagechannel
创建直接通信通道?例如:有一个主线程
P
,我使用
worker\u线程
API创建了它,它创建了两个worker线程
W1
W2

P -> W1
  -> W2

我想直接启用
W1
W2
之间的通信,而不是使用
parentPort

通过
p
来生成双向通信通道

index.js

const { Worker } = require('worker_threads');

const path = require('path'); 

const w1 = new Worker(path.join(__dirname,'./worker1.js'));
const w2 = new Worker(path.join(__dirname,'./worker2.js'));

w1.once('message', value => {
    w2.postMessage({
        port: value.port
    }, [value.port]);
});

w2.once('message', value => {
    w1.postMessage({
        port: value.port
    }, [value.port]);
});
worker1.js

const { MessageChannel, parentPort,  } = require('worker_threads');

let woker2Port;
console.log('worker1 started');

const { port1, port2 } = new MessageChannel();
port1.on('message', (value) => {
    console.log(value);
});

parentPort.postMessage({
    port: port2,
}, [port2]);

parentPort.on('message', value => {
    if (value.port) {
        woker2Port = value.port;
        woker2Port.postMessage({msg:'i am worker1!'});// send msg to worker2
        return;
    }
});
worker2.js

const { MessageChannel, parentPort,  } = require('worker_threads');

let woker1Port;
console.log('worker2 started');

const { port1, port2 } = new MessageChannel();
port1.on('message', (value) => {
    console.log(value);
});

parentPort.postMessage({
    port: port2,
}, [port2]);

parentPort.on('message', value => {
    if (value.port) {
        woker1Port = value.port;
        woker1Port.postMessage({msg:'i am worker2!'});// send msg to worker1
    }
});
注意:如果您在VSCode中调试此代码,您将不会在
worker1.js
worker2.js
中看到日志打印。
直接运行
节点索引
,或者在ndb中调试它,效果很好

您正在使用
辅助线程
模块?是。我正在使用worker_线程模块