给出以下父进程代码:
//SSO
this.sso = fork('./app/utils/SSOproxy.js', [], {
stdio: [0, 1, 2, 'ipc']
});
console.log(process);
console.log(this.sso);
//__handshake
this.sso.send({
opcode: 'ACK',
params: [],
ref: null
});
console.log('STEP_1');
process.prependOnceListener('message', ((msg) => {
if (msg.status) {
if ((msg.opcode === 'ACK') && (msg.params[0] === 'ok')) {
console.log('STEP_3');
}
}
}));
//__e.o.handshake
子进程(SSOproxy.js)代码:
process.on('message', ((msg) => {
switch (msg.opcode) {
//handshake
case 'ACK':
process.send({
opcode: 'ACK',
params: ['ok'],
ref: null
});
console.log('STEP_2');
break;
//Other paths...
}
));
在观察到的日志中 - STEP_1之后是STEP_2,但我从未见过STEP_3,因为我不能为我的生活找到如何为子/父进行双工通信。如何实现同样的目标?
答案 0 :(得分:2)
在prependOnceListener
msg.status
中,您有[{1}}的条件,但我在SSOproxy.js
代码中的任何位置都看不到此内容。
这意味着您的if永远不会评估true
您可以尝试在邮件中添加status
:
process.send({
opcode:'ACK',
params:['ok'],
ref: null,
status: 'test1234'
});