const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isPrimary) {
console.log(`Primary ${process.pid} is running`);
// Fork workers
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
// Listen for dying workers
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died with code: ${code} and signal: ${signal}`);
console.log('Starting a new worker');
cluster.fork();
});
// Event handlers for Worker objects
cluster.on('fork', (worker) => {
console.log(`Worker ${worker.id} (PID: ${worker.process.pid}) has been forked`);
});
cluster.on('online', (worker) => {
console.log(`Worker ${worker.id} is online`);
});
cluster.on('listening', (worker, address) => {
console.log(`Worker ${worker.id} is listening on ${address.address}:${address.port}`);
});
cluster.on('disconnect', (worker) => {
console.log(`Worker ${worker.id} has disconnected`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end(`Hello from Worker ${process.pid}\n`);
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
Primary 32496 is running Worker 1 (PID: 31572) has been forked Worker 2 (PID: 10228) has been forked Worker 3 (PID: 4940) has been forked Worker 4 (PID: 29704) has been forked Worker 5 (PID: 9496) has been forked Worker 6 (PID: 32020) has been forked Worker 7 (PID: 12356) has been forked Worker 8 (PID: 18276) has been forked Worker 9 (PID: 19128) has been forked Worker 10 (PID: 31844) has been forked Worker 11 (PID: 30496) has been forked Worker 12 (PID: 25516) has been forked Worker 13 (PID: 28844) has been forked Worker 14 (PID: 9084) has been forked Worker 15 (PID: 31352) has been forked Worker 16 (PID: 12096) has been forked Worker 1 is online Worker 2 is online Worker 3 is online Worker 7 is online Worker 12356 started Worker 4 is online Worker 7 is listening on null:8000 Worker 6 is online Worker 5 is online Worker 10 is online Worker 9 is online Worker 12 is online Worker 8 is online Worker 11 is online Worker 31572 started Worker 15 is online Worker 1 is listening on null:8000 Worker 14 is online Worker 10228 started Worker 4940 started Worker 31844 started Worker 2 is listening on null:8000 Worker 32020 started Worker 29704 started Worker 10 is listening on null:8000 Worker 3 is listening on null:8000 Worker 19128 started Worker 6 is listening on null:8000 Worker 25516 started Worker 18276 started Worker 9496 started Worker 13 is online Worker 9 is listening on null:8000 Worker 16 is online Worker 4 is listening on null:8000 Worker 12 is listening on null:8000 Worker 30496 started Worker 8 is listening on null:8000 Worker 5 is listening on null:8000 Worker 11 is listening on null:8000 Worker 31352 started Worker 9084 started Worker 15 is listening on null:8000 Worker 28844 started Worker 12096 started Worker 14 is listening on null:8000 Worker 16 is listening on null:8000 Worker 13 is listening on null:8000