forked from daver208/restify-base
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
74 lines (55 loc) · 1.69 KB
/
server.js
File metadata and controls
74 lines (55 loc) · 1.69 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*global module:true, require:true, console:true, process:true */
'use strict';
var path = require('path')
, cluster = require('cluster')
, config = require('yaml-config')
, settings = config.readConfig(path.join(__dirname, 'config.yaml'))
, worker = require('./worker')
, logging = require('./logging');
// if process.env.NODE_ENV has not been set, default to development
var NODE_ENV = process.env.NODE_ENV || 'development';
exports.run = run;
function spawnWorker (logger) {
// create servers
var server = worker.createServer(logger);
// start listening
var port = settings.server.port || 8000;
server.listen(port, function () {
logger.info('%s listening at %s', server.name, server.url);
});
}
function createCluster (logger) {
// Set up cluster and start servers
if (cluster.isMaster) {
var numCpus = require('os').cpus().length;
logger.info('Starting master, pid ' + process.pid + ', spawning ' + numCpus + ' workers');
// fork workers
for (var i = 0; i < numCpus; i++) {
cluster.fork();
}
cluster.on('listening', function (worker) {
logger.info('Worker ' + worker.id + ' started');
});
// if a worker dies, respawn
cluster.on('death', function (worker) {
logger.warn('Worker ' + worker.id + ' died, restarting...');
cluster.fork();
});
}
// Worker processes
else {
spawnWorker(logger);
}
}
function run (cluster) {
// Set up logging
var logger = logging.createLogger(settings.logs);
// In production environment, create a cluster
if (NODE_ENV === 'production' || Boolean(settings.server.cluster) || cluster ) {
createCluster(logger);
}
else {
spawnWorker(logger);
}
}
run();