在NodeJS集群模块中,事件的命名方式可能不同于“消息”吗?

时间:2019-11-06 13:42:34

标签: node.js multiprocessing node-cluster

我想知道(由于官方文档中没有提及),是否有一种方法可以从worker进程中发出事件,而这些事件的事件名称与默认事件名称不同,即 message ,这样我就可以在主进程中按照以下方式设置侦听器:

worker.once('someOtherMsgName', fn)

这样是为了避免实际回调函数中出现条件,而仅匹配侦听器以按其消息名称对适当的消息执行回调?

1 个答案:

答案 0 :(得分:1)

“消息”是指-IPC(进程间通信)已收到新的传入消息。 NodeJS只有一种内置方法可以在进程之间发送消息-process.sendchild_process.send

当然,您可以使用第三方模块(例如node-ipc)或使节点以您想要的任何方式解释消息内容:

main.js

const childProcess = require('child_process');
const fork = childProcess.fork(__dirname + '/fork.js');
const initIPC = require('./init-ipc');

initIPC(process);
fork.on('hello', event => {
  console.log(event.hello);
});

// Say hello to forked process
fork.send({event: 'hello', hello: 'Hello from main process!'});

fork.js

const initIPC = require('./init-ipc');

initIPC(process);
process.on('hello', event => {
  console.log(event.hello);
});

// Say hello to main process
process.send({event: 'hello', hello: 'Hello from forked process!'});

init-ipc.js

exports.initIPC = function (process) {
    process.on('message', message => {
        if (('event' in message) && typeof message.event === 'string') {
            process.emit(message.event, message);
        }
    });
};