重复执行多次的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,您将在该页面上找到相关文档。
我正在开发 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,您将在该页面上找到相关文档。