Skip to content

Instantly share code, notes, and snippets.

@WoZ
Created June 21, 2019 15:18
Show Gist options
  • Save WoZ/44f59cd31b9648e576350c4f7d1d22e7 to your computer and use it in GitHub Desktop.
Save WoZ/44f59cd31b9648e576350c4f7d1d22e7 to your computer and use it in GitHub Desktop.
Advanced example of a data loss
const cluster = require('cluster');
async function waitForMessage(child) {
return new Promise(resolve => {
child.once('message', msg => {
console.log('Master. waitForMessage. Message is received', msg);
return resolve();
});
});
}
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
const child = cluster.fork();
child.once('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
child.on('message', msg => {
console.log(`Master. Message observer: ${msg}`);
});
child.once('online', async () => {
console.log('Master. Sending command.');
child.send('start');
console.log('Master. Start of await #1.');
await waitForMessage(child);
console.log('Master. End of await #1.');
console.log('Master. Start of await #2.');
await waitForMessage(child);
console.log('Master. End of await #2.');
process.exit(0);
});
} else {
console.log(`Worker ${process.pid} started`);
process.on('message', (msg) => {
if (msg !== 'start') return;
process.send('message1');
process.send('message2');
process.send('message3');
});
}
/*
Master 11853 is running
Master. Sending command.
Master. Start of await #1.
Worker 11854 started
Master. Message observer: message1
Master. waitForMessage. Message is received message1
Master. Message observer: message2
Master. Message observer: message3
Master. End of await #1.
Master. Start of await #2.
// hanged up
--------
Master 11860 is running
Master. Sending command.
Master. Start of await #1.
Worker 11861 started
Master. Message observer: message1
Master. waitForMessage. Message is received message1
Master. End of await #1.
Master. Start of await #2.
Master. Message observer: message2
Master. waitForMessage. Message is received message2
Master. Message observer: message3
Master. End of await #2.
Process finished with exit code 0
// executed ok
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment