You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
// cluster.ts
|
|
import * as cluster from 'cluster';
|
|
import * as os from 'os';
|
|
|
|
export class Cluster {
|
|
static register(workers: Number, callback: Function): void {
|
|
if (cluster.isMaster) {
|
|
console.log(`Master server started on ${process.pid}`);
|
|
|
|
//ensure workers exit cleanly
|
|
process.on('SIGINT', function () {
|
|
console.log('Cluster shutting down...');
|
|
for (var id in cluster.workers) {
|
|
cluster.workers[id].kill();
|
|
}
|
|
// exit the master process
|
|
process.exit(0);
|
|
});
|
|
|
|
var cpus = os.cpus().length;
|
|
if (workers > cpus)
|
|
workers = cpus;
|
|
|
|
for (let i = 0; i < workers; i++) {
|
|
cluster.fork();
|
|
}
|
|
cluster.on('online', function (worker) {
|
|
console.log('Worker %s is online', worker.process.pid);
|
|
});
|
|
cluster.on('exit', (worker, code, signal) => {
|
|
console.log(`Worker ${worker.process.pid} died. Restarting`);
|
|
cluster.fork();
|
|
})
|
|
} else {
|
|
|
|
callback();
|
|
}
|
|
}
|
|
}
|