1 | var cluster = require('cluster');
|
2 | var Derby = require('./Derby');
|
3 | var util = require('racer/lib/util');
|
4 |
|
5 |
|
6 | require('derby-parsing');
|
7 |
|
8 | util.isProduction = process.env.NODE_ENV === 'production';
|
9 |
|
10 | Derby.prototype.run = function(createServer) {
|
11 |
|
12 | if (this.util.isProduction) return createServer();
|
13 | if (cluster.isMaster) {
|
14 | console.log('Master pid ', process.pid);
|
15 | startWorker();
|
16 | } else {
|
17 | createServer();
|
18 | }
|
19 | };
|
20 |
|
21 | function startWorker() {
|
22 | var worker = cluster.fork();
|
23 | worker.once('disconnect', function () {
|
24 | worker.process.kill();
|
25 | });
|
26 | worker.on('message', function(message) {
|
27 | if (message.type === 'reload') {
|
28 | if (worker.disconnecting) return;
|
29 | console.log('Killing %d', worker.process.pid);
|
30 | worker.process.kill();
|
31 | worker.disconnecting = true;
|
32 | startWorker();
|
33 | }
|
34 | });
|
35 | }
|