1 |
|
2 | 'use strict';
|
3 |
|
4 | const cluster = require('cluster');
|
5 | const chalk = require('chalk');
|
6 | const winston = require('winston');
|
7 |
|
8 |
|
9 | function createWorker(){
|
10 |
|
11 |
|
12 | require('./moduleComposer').loadModules();
|
13 |
|
14 |
|
15 | require('./express');
|
16 |
|
17 |
|
18 | printOnce(()=>{
|
19 | winston.info('-'.repeat(70));
|
20 | winston.info(chalk.blue('Server Ready'));
|
21 | winston.info('='.repeat(70));
|
22 | });
|
23 | }
|
24 |
|
25 |
|
26 | function init(){
|
27 |
|
28 |
|
29 | if (cluster.isMaster) {
|
30 |
|
31 |
|
32 | winston.info('='.repeat(70));
|
33 | winston.info('Just', chalk.green('Make It Once'),'|',chalk.blue('MakeItOnce.net'));
|
34 | winston.info('-'.repeat(70));
|
35 | winston.info('Starting',global.name,'v'+global.version,'app server...');
|
36 |
|
37 |
|
38 | var cpuCount = require('os').cpus().length;
|
39 | winston.info('Detected '+chalk.green(cpuCount)+' cores');
|
40 |
|
41 | if(config.useCluster){
|
42 |
|
43 | for (var i = 0; i < cpuCount; i += 1) {
|
44 | cluster.fork();
|
45 | }
|
46 |
|
47 |
|
48 | cluster.on('exit', function (worker) {
|
49 |
|
50 | winston.error('Worker ' + worker.id + ' died :( Restarting...');
|
51 | cluster.fork();
|
52 |
|
53 | });
|
54 | }else{
|
55 |
|
56 | createWorker();
|
57 | }
|
58 |
|
59 |
|
60 | }else{
|
61 |
|
62 | createWorker();
|
63 | }
|
64 | }
|
65 |
|
66 |
|
67 | function printOnce(callback){
|
68 | if(workerId()==1 && callback){
|
69 | callback();
|
70 | }
|
71 | }
|
72 |
|
73 |
|
74 | function workerId(){
|
75 | if(cluster.isMaster){
|
76 | return 1;
|
77 | }else if(cluster.worker && cluster.worker.id){
|
78 | return cluster.worker.id;
|
79 | }
|
80 | return -1;
|
81 | }
|
82 |
|
83 | module.exports = {
|
84 | init: init,
|
85 | printOnce: printOnce,
|
86 | workerId: workerId,
|
87 | createWorker: createWorker
|
88 | };
|