Nodejs中两个子进程之间如何通信的?

Nodejs中两个子进程之间如何通信的?

现在是一个主进程创建两个工作进程 这两个进程之间如何通信

4 回复

Node.js 中两个子进程之间如何通信?

在 Node.js 中,我们可以使用 child_process 模块来创建子进程,并通过不同的方式让这些子进程进行通信。最常见的方式是使用管道(pipe)或者 IPC(Inter-Process Communication,进程间通信)。

示例代码

假设我们有一个主进程 main.js 和两个子进程 worker1.jsworker2.js。我们希望这两个子进程能够相互通信。

main.js

const { fork } = require('child_process');

// 创建两个子进程
const worker1 = fork('worker1.js');
const worker2 = fork('worker2.js');

// 设置 worker1 向 worker2 发送消息
worker1.on('message', (msg) => {
    console.log(`Worker1 sent message to Worker2: ${msg}`);
    worker2.send(msg);
});

// 设置 worker2 向 worker1 发送消息
worker2.on('message', (msg) => {
    console.log(`Worker2 sent message to Worker1: ${msg}`);
    worker1.send(msg);
});

// worker1 发送初始消息给 worker2
worker1.send('Hello from Worker1');

// worker2 发送初始消息给 worker1
worker2.send('Hello from Worker2');

worker1.js

process.on('message', (msg) => {
    console.log(`Received message in Worker1: ${msg}`);
});

worker2.js

process.on('message', (msg) => {
    console.log(`Received message in Worker2: ${msg}`);
});

解释

  1. 创建子进程:在 main.js 中,我们使用 fork() 方法来创建两个子进程 worker1.jsworker2.js

  2. 监听消息:每个子进程都可以通过 process.on('message', callback) 来监听来自其他进程的消息。

  3. 发送消息:通过 worker.send(message) 方法可以向另一个子进程发送消息。当子进程接收到消息时,会触发 'message' 事件并调用相应的回调函数。

  4. 双向通信:在这个例子中,我们设置了一个双向通信机制,即 worker1 可以向 worker2 发送消息,反之亦然。

通过这种方式,我们可以实现两个子进程之间的有效通信。这种方法非常适合处理需要多个进程协同工作的场景,比如分布式系统或负载均衡等。


楼主去官网看看它的API吧

process模块

在 Node.js 中,主进程可以通过 child_process 模块创建多个子进程,并通过管道(pipe)实现这些子进程之间的通信。主要使用的方法是 child_process.fork()process.send()

示例代码

主进程代码

const { fork } = require('child_process');

// 创建两个子进程
const worker1 = fork('./worker1.js');
const worker2 = fork('./worker2.js');

// 监听 worker1 发送的消息
worker1.on('message', (msg) => {
    console.log(`Received from worker1: ${msg}`);
});

// 监听 worker2 发送的消息
worker2.on('message', (msg) => {
    console.log(`Received from worker2: ${msg}`);
});

// 向 worker1 发送消息
setTimeout(() => {
    worker1.send({ hello: 'world' });
}, 1000);

// 向 worker2 发送消息
setTimeout(() => {
    worker2.send({ hello: 'world' });
}, 1500);

子进程 worker1.js

process.on('message', (msg) => {
    console.log(`Received in worker1: ${JSON.stringify(msg)}`);
});

// 向主进程发送消息
setInterval(() => {
    process.send({ ping: 'pong' });
}, 2000);

子进程 worker2.js

process.on('message', (msg) => {
    console.log(`Received in worker2: ${JSON.stringify(msg)}`);
});

// 向主进程发送消息
setInterval(() => {
    process.send({ pong: 'ping' });
}, 2500);

解释

  1. 主进程 使用 fork() 方法创建两个子进程。
  2. 每个子进程可以监听并处理来自主进程和其他子进程的消息。
  3. 主进程通过 send() 方法向子进程发送消息。
  4. 子进程通过 process.on('message') 监听主进程和其他子进程发送的消息。
  5. 消息可以通过 process.send() 方法在子进程间传递。

这样,你就可以实现主进程和子进程以及子进程之间的双向通信。

回到顶部