我有一个主进程,这个 fork 一个子进程。这孩子做一些计算。在孩子代码的某个时刻,我想向父母询问一些数据。这个请求是高度动态的,此时我想等待这个请求的回答/响应。但是我如何等待 process.send() 或者是否可以向 .send() 添加回调函数?
我试图将我的问题分解为一个简单的例子。在我的示例中,高度动态的值是 worker 中的 randomval。我知道任务
var c = process.send({msg:'get_c',randomval:Math.floor((Math.random()*10)+1)});
不能工作。但我不知道如何描述这个问题。
main.js
var childProcessCalc = require('child_process').fork(__dirname + '/worker');
childProcessCalc.send({msgtype:'docalc'});
childProcessCalc.on('message',function(msg){
if(msg.msg === 'pi')
{
console.log("Pi"+msg.pi+" by c="+msg.c);
}
else if(msg.msg === 'get_c')
{
console.log('child wants c');
childProcessCalc.send({msgtype:'your_c',c:1000000*msg.randomval});
}
});
childProcessCalc.on('exit',function(){
console.log('main:the childProzess has exit!')
});
worker.js
process.on('message', function(msg){
if(msg.msgtype == 'docalc') {
//Here is my Problem, how to wait for the message thats the response for
//exactly this send / randomval, or how to add a callback to send
var c = process.send({msg:'get_c',randomval:Math.floor((Math.random()*10)+1)});
var Pi=0;
var n=1;
for (var i=0;i<=c;i++)
{
Pi=Pi+(4/n)-(4/(n+2))
n=n+4
}
process.send({msg:'pi',pi:Pi,c:c})
}
else if(msg.msgtype === 'your_c')
{
console.log('parent hase sendc='+msg.c);
}
});