重复执行多次的Nodejs fork回调

Nodejs fork callback executed repeated times

我正在开发 Express 4,我已将一项繁重的任务移交给子进程。一切正常,除了父进程中的回调以某种方式执行了不止一次。那就是导致错误的原因 "can't set headers after they are sent" 为什么会发生第一件事? 父进程:

var cp = require('child_process').fork('./child.js');
cp.send(data);
cp.on('message', function(data){
    console.log('status: '+data.status);
    return res.status(200).json(data);
});

分叉进程:

process.on('message', function(data){
    /*process the data*/
    process.send({status: 200});
});

结果:

/*first time*/
status: 200
/*second time*/
status: 200
status: 200
/*third time*/
status: 200
status: 200
status: 200
/*random time*/
status: 200
status: 200
status: 200
status: 200

您每次都在创建一个新的侦听器,这就是回调被调用 n+1 次的原因。

尝试使用 .once() 而不是 .on()

由于大多数使用 Node.js 中事件的库都继承自 EventEmitter,您将在该页面上找到相关文档。