forked from icebob/vue-express-mongo-boilerplate
-
Notifications
You must be signed in to change notification settings - Fork 4
/
cluster.js
40 lines (35 loc) · 950 Bytes
/
cluster.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"use strict";
const
cluster = require("cluster"),
stopSignals = [
"SIGHUP", "SIGINT", "SIGQUIT", "SIGILL", "SIGTRAP", "SIGABRT",
"SIGBUS", "SIGFPE", "SIGUSR1", "SIGSEGV", "SIGUSR2", "SIGTERM"
],
production = process.env.NODE_ENV == "production";
let stopping = false;
cluster.on("disconnect", function(worker) {
if (production) {
if (!stopping)
cluster.fork();
} else
process.exit(1);
});
if (cluster.isMaster) {
const workerCount = process.env.NODE_CLUSTER_WORKERS || 4;
console.log(`Starting ${workerCount} workers...`);
for (let i = 0; i < workerCount; i++)
cluster.fork();
if (production) {
stopSignals.forEach(function (signal) {
process.on(signal, function () {
console.log(`Got ${signal}, stopping workers...`);
stopping = true;
cluster.disconnect(function () {
console.log("All workers stopped, exiting.");
process.exit(0);
});
});
});
}
} else
require("./server/index.js");