Node.js 进程间通信错误
Node.js Inter-process communication Faulters
给定以下父进程代码:
//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 因为我无法终生弄清楚如何获得双工child/parent 的通信。如何实现相同?
在您的 prependOnceListener
中,您有 msg.status
的条件,但我在您的 SSOproxy.js
代码的任何地方都没有看到这个。
这意味着您的 if 永远不会计算 true
您可以尝试在您的消息中添加 status
吗:
process.send({
opcode:'ACK',
params:['ok'],
ref: null,
status: 'test1234'
});
给定以下父进程代码:
//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 因为我无法终生弄清楚如何获得双工child/parent 的通信。如何实现相同?
在您的 prependOnceListener
中,您有 msg.status
的条件,但我在您的 SSOproxy.js
代码的任何地方都没有看到这个。
这意味着您的 if 永远不会计算 true
您可以尝试在您的消息中添加 status
吗:
process.send({
opcode:'ACK',
params:['ok'],
ref: null,
status: 'test1234'
});