0
이것은 매우 흥미 롭습니다! 무슨 일이야?작업자가 빈 오류 객체를받습니다.
- 마스터 과정은
- 마스터 포크에게 (또한 노동자라는) 새로운 프로세스는 근로자가 온라인 상태 일 때 알고 오도록
- 마스터는 또한, 자체에 리스너를 활성화를 시작한다. (근로자가 온라인 상태가되면 주인은 인사 메시지를 보냅니다.)
- 근로자가 시작되었습니다.
- 근로자는 청취자를 등록합니다. 따라서 메시지가 주인에 의해 작업자에게 전송되면 메시지가 그 작업자에게 전송됩니다.
- 작업자가 인사말을 받으면 즉시 루틴을 호출하지만 오류가 발생합니다. 작업자는 방금 호출 한 루틴에 의해보고 된 전체 오류 개체를보고하려고합니다.
- 작업자는 개체에 오류 개체를 래핑하고 새로운 키를 추가하고
send
을 사용하여 마스터에 다시보고합니다. - Master는 작업자의 말을 듣고 메시지를 수신하지만 작업자가 보낸 오류 개체를 찾지 못합니다!
이것은 이야기의 끝이었습니다.
문제는 마지막 지점에서 설명합니다. 마스터가 오류 오브젝트를 수신하지 않았습니다. 그 이유는 무엇일까요? 작업자는 오류 개체를 마스터로 보내기 전에 그대로 유지합니다. 위의 코드를 실행하려고하면이 출력 될 것입니다
const cluster = require('cluster');
const Promise = require('bluebird');
if (cluster.isMaster) {
console.log(`Master process is running`);
let worker = cluster.fork(); // START A WORKER
worker.on('message', (message) => { // LISTEN TO WORKER
console.log(`Received from worker: ${message}`);
});
cluster.on('online', (worker) => { // LISTEN TO WHEN WORKER IS ONLINE
worker.send('Hello worker'); // SEND HER A MESSAGE
});
} else {
process.on('message', async (message) => { // LISTEN TO HER MASTER
try {
let response = await calculate();
process.send({
status: true,
trace: null,
message: 'ok'
});
} catch (err) {
process.send({
status: false,
trace: err, // ERR WAS HERE, BUT DOESN'T REACH MASTER!
message: err.message
});
}
});
}
function calculate() {
try {
throw new Error('This will take forever to compute');
} catch (err) {
return Promise.reject(err);
}
}
: 여기
위의 설명은 코드 우리가 보듯이Master process is running
Received from worker: {"status":false,"trace":{},"message":"This will take forever to compute"}
, 추적이 비어 ! process.send() 메소드 API doc으로 당
[JSON.stringify를 사용하여 오류를 문자열화할 수 있습니까?] (https://stackoverflow.com/questions/18391212/is-it-not-possible-to-stringify-an-error-using-json -stringify) –
https://stackoverflow.com/questions/32941243/node-js-console-logobject-prints-empty-object –
https://stackoverflow.com/questions/17893718/what-does-enumerable-mean –