Dotos 8 жил өмнө
parent
commit
f24a02fbfc
2 өөрчлөгдсөн 140 нэмэгдсэн , 116 устгасан
  1. 94 72
      bin/www
  2. 46 44
      package.json

+ 94 - 72
bin/www

@@ -4,87 +4,109 @@
  * Module dependencies.
  * Module dependencies.
  */
  */
 
 
-var app = require('../app');
-var debug = require('debug')('API:server');
-var http = require('http');
+let app = require('../app');
+let debug = require('debug')('API:server');
+let http = require('http');
+const cluster = require('cluster');
+const cpus = require('os').cpus().length;
 
 
-/**
- * Get port from environment and store in Express.
- */
-
-var port = normalizePort(process.env.PORT || '3000');
-app.set('port', port);
-
-/**
- * Create HTTP server.
- */
-
-var server = http.createServer(app);
-
-/**
- * Listen on provided port, on all network interfaces.
- */
-
-server.listen(port);
-server.on('error', onError);
-server.on('listening', onListening);
-
-/**
- * Normalize a port into a number, string, or false.
- */
-
-function normalizePort(val) {
-    var port = parseInt(val, 10);
+if (cluster.isMaster) {
+    console.log('[master] ' + "start master...");
 
 
-    if (isNaN(port)) {
-        // named pipe
-        return val;
+    for (var i = 0; i < cpus; i++) {
+        cluster.fork();
     }
     }
 
 
-    if (port >= 0) {
-        // port number
-        return port;
+    cluster.on('listening', function(worker, address) {
+        console.log('[master] ' + 'listening: worker' + worker.id + ',pid:' + worker.process.pid + ', Address:' + address.address + ":" + address.port);
+    });
+    cluster.on('exit', function(worker, code, signal) {
+        console.log(`[master] pid:${worker.id} is died, restarting...`);
+        cluster.fork();
+    });
+} else {
+    /**
+     * Get port from environment and store in Express.
+     */
+
+    let port = normalizePort(process.env.PORT || '3000');
+    app.set('port', port);
+
+    /**
+     * Create HTTP server.
+     */
+
+    let server = http.createServer(app);
+
+    /**
+     * Listen on provided port, on all network interfaces.
+     */
+
+    server.listen(port);
+    server.on('error', onError);
+    server.on('listening', onListening);
+
+    /**
+     * Normalize a port into a number, string, or false.
+     */
+
+    function normalizePort(val) {
+        let port = parseInt(val, 10);
+
+        if (isNaN(port)) {
+            // named pipe
+            return val;
+        }
+
+        if (port >= 0) {
+            // port number
+            return port;
+        }
+
+        return false;
     }
     }
 
 
-    return false;
-}
-
-/**
- * Event listener for HTTP server "error" event.
- */
-
-function onError(error) {
-    if (error.syscall !== 'listen') {
-        throw error;
-    }
+    /**
+     * Event listener for HTTP server "error" event.
+     */
 
 
-    var bind = typeof port === 'string' ?
-        'Pipe ' + port :
-        'Port ' + port;
-
-    // handle specific listen errors with friendly messages
-    switch (error.code) {
-        case 'EACCES':
-            console.error(bind + ' requires elevated privileges');
-            process.exit(1);
-            break;
-        case 'EADDRINUSE':
-            console.error(bind + ' is already in use');
-            process.exit(1);
-            break;
-        default:
+    function onError(error) {
+        if (error.syscall !== 'listen') {
             throw error;
             throw error;
+        }
+
+        let bind = typeof port === 'string' ?
+            'Pipe ' + port :
+            'Port ' + port;
+
+        // handle specific listen errors with friendly messages
+        switch (error.code) {
+            case 'EACCES':
+                console.error(bind + ' requires elevated privileges');
+                process.exit(1);
+                break;
+            case 'EADDRINUSE':
+                console.error(bind + ' is already in use');
+                process.exit(1);
+                break;
+            default:
+                throw error;
+        }
     }
     }
-}
 
 
-/**
- * Event listener for HTTP server "listening" event.
- */
+    /**
+     * Event listener for HTTP server "listening" event.
+     */
+
+    function onListening() {
 
 
-function onListening() {
-    var addr = server.address();
-    var bind = typeof addr === 'string' ?
-        'pipe ' + addr :
-        'port ' + addr.port;
-    debug('Listening on ' + bind);
+        if (cluster.isWorker) {
+            console.log('worker' + cluster.worker.id);
+        }
+        let addr = server.address();
+        let bind = typeof addr === 'string' ?
+            'pipe ' + addr :
+            'port ' + addr.port;
+        debug('Listening on ' + bind);
+    }
 }
 }

+ 46 - 44
package.json

@@ -1,45 +1,47 @@
 {
 {
-    "name": "JsonBird",
-    "version": "1.4.0",
-    "description": "A Remote Json Agent Service",
-    "author": {
-        "name": "xCss",
-        "mail": "yy.liu@foxmail.com"
-    },
-    "license": "MIT",
-    "private": true,
-    "scripts": {
-        "start": "node ./bin/www"
-    },
-    "repository": {
-        "type": "git",
-        "url": "git+https://github.com/xCss/JsonBird.git"
-    },
-    "keywords": [
-        "JsonBird",
-        "JsonProxy"
-    ],
-    "bugs": {
-        "url": "https://github.com/xCss/JsonBird/issues"
-    },
-    "readme": "./readme.md",
-    "homepage": "https://github.com/xCss/JsonBird#readme",
-    "dependencies": {
-        "bcryptjs": "^2.3.0",
-        "body-parser": "~1.15.1",
-        "cookie-parser": "~1.4.3",
-        "debug": "~2.2.0",
-        "express": "~4.13.4",
-        "express-generator": "^4.13.4",
-        "moment": "^2.15.0",
-        "moment-timezone": "^0.5.5",
-        "morgan": "~1.7.0",
-        "mysql": "^2.11.1",
-        "node-sass": "^3.10.0",
-        "node-sass-middleware": "^0.9.8",
-        "pug": "^2.0.0-beta6",
-        "querystring": "^0.2.0",
-        "request": "^2.74.0",
-        "serve-favicon": "~2.3.0"
-    }
-}
+  "name": "JsonBird",
+  "version": "1.4.0",
+  "description": "A Remote Json Agent Service",
+  "author": {
+    "name": "xCss",
+    "mail": "yy.liu@foxmail.com"
+  },
+  "license": "MIT",
+  "private": true,
+  "scripts": {
+    "start": "node ./bin/www"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/xCss/JsonBird.git"
+  },
+  "keywords": [
+    "JsonBird",
+    "JsonProxy"
+  ],
+  "bugs": {
+    "url": "https://github.com/xCss/JsonBird/issues"
+  },
+  "readme": "./readme.md",
+  "homepage": "https://github.com/xCss/JsonBird#readme",
+  "dependencies": {
+    "bcryptjs": "^2.3.0",
+    "body-parser": "~1.15.1",
+    "cluster": "^0.7.7",
+    "cookie-parser": "~1.4.3",
+    "debug": "~2.2.0",
+    "express": "~4.13.4",
+    "express-generator": "^4.13.4",
+    "moment": "^2.15.0",
+    "moment-timezone": "^0.5.5",
+    "morgan": "~1.7.0",
+    "mysql": "^2.11.1",
+    "node-sass": "^3.10.0",
+    "node-sass-middleware": "^0.9.8",
+    "os": "^0.1.1",
+    "pug": "^2.0.0-beta6",
+    "querystring": "^0.2.0",
+    "request": "^2.74.0",
+    "serve-favicon": "~2.3.0"
+  }
+}