Browse Source

Refactor server creation/routing to worker-specific file

Zane Kansil 10 năm trước cách đây
mục cha
commit
68bb9d072a

+ 16 - 0
frameworks/JavaScript/nodejs/app.js

@@ -0,0 +1,16 @@
+var cluster = require('cluster');
+var numCPUs = require('os').cpus().length;
+
+if (cluster.isMaster) {
+  // Fork workers.
+  for (var i = 0; i < numCPUs; i++) {
+    cluster.fork();
+  }
+
+  cluster.on('exit', function (worker, code, signal) {
+    console.log('worker ' + worker.pid + ' died');
+  });
+} else {
+  // Task for forked worker
+  require('./create-server');
+}

+ 84 - 0
frameworks/JavaScript/nodejs/create-server.js

@@ -0,0 +1,84 @@
+// Forked workers will run this code when found to not be
+// the master of the cluster.
+
+var http = require('http');
+var url = require('url');
+var h = require('./helper');
+
+// Handlers, one for each db config
+var MongodbRawHandler = require('./handlers/mongodb-raw');
+var MySQLRawHandler = require('./handlers/mysql-raw');
+
+// Mongoose is a popular Node/MongoDB driver
+var MongooseHandler = require('./handlers/mongoose');
+
+// Sequelize is a popular Node/SQL driver
+var SequelizeHandler = require('./handlers/sequelize');
+
+// Node's redis package uses the C bindings of the hiredis library
+var HiredisHandler = require('./handlers/redis');
+
+module.exports = http.createServer(function (req, res) {
+  var values = url.parse(req.url, true);
+  var route = values.pathname;
+
+  // Basic routes, no db required
+  if (route === '/json') {
+    return h.responses.jsonSerialization(req, res);
+  } else if (route === '/plaintext') {
+    return h.responses.plaintext(req, res);
+
+  // No queries parameter required
+  } else if (route === '/mongoose/db') {
+    return MongooseHandler.SingleQuery(req, res);
+  } else if (route === '/mongoose/fortunes') {
+    return MongooseHandler.Fortunes(req, res);
+  } else if (route === '/mongodb/db') {
+    return MongodbRawHandler.SingleQuery(req, res);
+  } else if (route === '/mongodb/fortunes') {
+    return MongodbRawHandler.Fortunes(req, res);
+  } else if (route === '/sequelize/db') {
+    return SequelizeHandler.SingleQuery(req, res);
+  } else if (route === '/sequelize/fortunes') {
+    return SequelizeHandler.Fortunes(req, res);
+  } else if (route === '/mysql/db') {
+    return MySQLRawHandler.SingleQuery(req, res);
+  } else if (route === '/mysql/fortunes') {
+    return MySQLRawHandler.Fortunes(req, res);
+  } else if (route === '/hiredis/db') {
+    return HiredisHandler.SingleQuery(req, res);
+  } else if (route === '/hiredis/fortunes') {
+    return HiredisHandler.Fortunes(req, res);
+  }
+
+  else {
+    var queries = isNaN(values.query.queries) ? 1 : parseInt(values.query.queries, 10);
+    queries = Math.min(Math.max(queries, 1), 500);
+
+    if (route === '/mongoose/queries') {
+      return MongooseHandler.MultipleQueries(queries, req, res);
+    } else if (route === '/mongoose/updates') {
+      return MongooseHandler.Updates(queries, req, res);
+    } else if (route === '/mongodb/queries') {
+      return MongodbRawHandler.MultipleQueries(queries, req, res);
+    } else if (route === '/mongodb/updates') {
+      return MongodbRawHandler.Updates(queries, req, res);
+    } else if (route === '/sequelize/queries') {
+      return SequelizeHandler.MultipleQueries(queries, req, res);
+    } else if (route === '/sequelize/updates') {
+      return SequelizeHandler.Updates(queries, req, res);
+    } else if (route === '/mysql/queries') {
+      return MySQLRawHandler.MultipleQueries(queries, req, res);
+    } else if (route === '/mysql/updates') {
+      return MySQLRawHandler.Updates(queries, req, res);
+    } else if (route === '/hiredis/queries') {
+      return HiredisHandler.MultipleQueries(queries, req, res);
+    } else if (route === '/hiredis/updates') {
+      return HiredisHandler.Updates(queries, req, res);
+    } else {
+      return h.responses.routeNotImplemented(req, res);
+    }
+  }
+}).listen(8080, function() {
+  console.log("NodeJS worker listening on port 8080");
+});

+ 0 - 94
frameworks/JavaScript/nodejs/hello.js

@@ -1,94 +0,0 @@
-var cluster = require('cluster')
-  , numCPUs = require('os').cpus().length
-  , http = require('http')
-  , url = require('url');
-
-var h = require('./helper.js');
-
-//
-// Handlers, one for each db config
-//
-var MongodbRawHandler = require('./handlers/mongodb-raw');
-var MySQLRawHandler = require('./handlers/mysql-raw');
-// Mongoose is a popular Node/MongoDB driver
-var MongooseHandler = require('./handlers/mongoose');
-// Sequelize is a popular Node/SQL driver
-var SequelizeHandler = require('./handlers/sequelize');
-// Node's redis package uses the C bindings of the hiredis library
-var HiredisHandler = require('./handlers/redis');
-
-if (cluster.isMaster) {
-  // Fork workers.
-  for (var i = 0; i < numCPUs; i++) {
-    cluster.fork();
-  }
-
-  cluster.on('exit', function (worker, code, signal) {
-    console.log('worker ' + worker.pid + ' died');
-  });
-} else {
-  http.createServer(function (req, res) {
-    var values = url.parse(req.url, true);
-    var route = values.pathname;
-
-    // Basic routes, no db required
-    if (route === '/json') {
-      return h.responses.jsonSerialization(req, res);
-    } else if (route === '/plaintext') {
-      return h.responses.plaintext(req, res);
-
-    // No queries parameter required
-    } else if (route === '/mongoose/db') {
-      return MongooseHandler.SingleQuery(req, res);
-    } else if (route === '/mongoose/fortunes') {
-      return MongooseHandler.Fortunes(req, res);
-    } else if (route === '/mongodb/db') {
-      return MongodbRawHandler.SingleQuery(req, res);
-    } else if (route === '/mongodb/fortunes') {
-      return MongodbRawHandler.Fortunes(req, res);
-    } else if (route === '/sequelize/db') {
-      return SequelizeHandler.SingleQuery(req, res);
-    } else if (route === '/sequelize/fortunes') {
-      return SequelizeHandler.Fortunes(req, res);
-    } else if (route === '/mysql/db') {
-      return MySQLRawHandler.SingleQuery(req, res);
-    } else if (route === '/mysql/fortunes') {
-      return MySQLRawHandler.Fortunes(req, res);
-    } else if (route === '/hiredis/db') {
-      return HiredisHandler.SingleQuery(req, res);
-    } else if (route === '/hiredis/fortunes') {
-      return HiredisHandler.Fortunes(req, res);
-    }
-
-    else {
-      var queries = isNaN(values.query.queries) ? 1 : parseInt(values.query.queries, 10);
-      queries = Math.min(Math.max(queries, 1), 500);
-
-      if (route === '/mongoose/queries') {
-        return MongooseHandler.MultipleQueries(queries, req, res);
-      } else if (route === '/mongoose/updates') {
-        return MongooseHandler.Updates(queries, req, res);
-      } else if (route === '/mongodb/queries') {
-        return MongodbRawHandler.MultipleQueries(queries, req, res);
-      } else if (route === '/mongodb/updates') {
-        return MongodbRawHandler.Updates(queries, req, res);
-      } else if (route === '/sequelize/queries') {
-        return SequelizeHandler.MultipleQueries(queries, req, res);
-      } else if (route === '/sequelize/updates') {
-        return SequelizeHandler.Updates(queries, req, res);
-      } else if (route === '/mysql/queries') {
-        return MySQLRawHandler.MultipleQueries(queries, req, res);
-      } else if (route === '/mysql/updates') {
-        return MySQLRawHandler.Updates(queries, req, res);
-      } else if (route === '/hiredis/queries') {
-        return HiredisHandler.MultipleQueries(queries, req, res);
-      } else if (route === '/hiredis/updates') {
-        return HiredisHandler.Updates(queries, req, res);
-      } else {
-        return responses.routeNotImplemented(req, res);
-      }
-    }
-  }).listen(8080, function() {
-    console.log("NodeJS worker listening on port 8080");
-  });
-}

+ 3 - 3
frameworks/JavaScript/nodejs/setup.sh

@@ -1,6 +1,6 @@
 #!/bin/bash
-sed -i 's|localhost|'"${DBHOST}"'|g' hello.js
-sed -i 's|mongodb://.*/hello_world|mongodb://'"${DBHOST}"'/hello_world|g' hello.js
+sed -i 's|localhost|'"${DBHOST}"'|g' app.js
+sed -i 's|mongodb://.*/hello_world|mongodb://'"${DBHOST}"'/hello_world|g' app.js
 
 export NODE_ENV=production
 export NVM_HOME=${IROOT}/nvm
@@ -14,4 +14,4 @@ nvm use 0.12.2
 npm install -g npm
 
 npm install
-node hello.js &
+node app.js &