Node.js进程间通信故障

时间:2017-12-07 11:19:18

标签: javascript node.js ipc child-process

给出以下父进程代码:

//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,因为我不能为我的生活找到如何为子/父进行双工通信。如何实现同样的目标?

1 个答案:

答案 0 :(得分:2)

prependOnceListener msg.status中,您有[{1}}的条件,但我在SSOproxy.js代码中的任何位置都看不到此内容。

这意味着您的if永远不会评估true

您可以尝试在邮件中添加status

process.send({
    opcode:'ACK',
    params:['ok'],
    ref: null,
    status: 'test1234'
});