📅  最后修改于: 2023-12-03 15:03:13.611000             🧑  作者: Mango
在使用Node.js进行后端开发时,我们可能需要实现多个进程之间的通信。Node.js提供了MessageChannel.postMessage()方法,它可以实现进程间通信。
MessageChannel.postMessage()方法用来向其他进程发送消息。它的参数有两个:
该方法返回的是一个布尔值,表示消息是否被成功发送。
Node.js 代码示例:
// 创建 MessageChannel
const { port1, port2 } = new MessageChannel();
// 监听接收消息的 port2
port2.on("message", (value) => {
console.log(`接收到的消息:${value}`);
});
// 向 port1 发送消息
port1.postMessage("Hello World!");
在该示例中,我们创建了一个MessageChannel,并将其一分为二,分别赋值给了port1和port2两个变量。我们监听port2的“message”事件,并打印出接收到的消息。接着,我们通过port1向port2发送了一条消息“Hello World!”。
MessageChannel对象在父子进程之间传递时,将被复制两次。其中父进程的MessageChannel对象与子进程的 MessageChannel 对象不互通。所以我们在使用MessageChannel时需要注意内存的使用。
在创建MessageChannel时,不能直接使用new MessageChannel()。在Node.js中,我们需要使用worker_threads模块创建worker时才能使用MessageChannel方法。
在使用postMessage()方法时,我们需要了解transferList的用法。如果不需要传递所有权,可以将它设置为空数组。
Node.js官方文档 MessageChannel.postMessage()
《Node.js入门》 第八章 进程和线程
MDN web docs - MessageChannel: a way to communicate between different browsing contexts or workers