Browse Source

Merge branch 'master' of github.com:bjornstar/FrameworkBenchmarks into bjornstar-master

Patrick Falls 12 years ago
parent
commit
d97df8f743
2 changed files with 105 additions and 94 deletions
  1. 103 93
      nodejs/hello.js
  2. 2 1
      nodejs/package.json

+ 103 - 93
nodejs/hello.js

@@ -1,6 +1,20 @@
 var cluster = require('cluster')
-  , numCPUs = require('os').cpus().length
-  , http = require('http')
+  , 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');
+  });
+
+  return;
+}
+
+var http = require('http')
   , url = require('url')
   , async = require('async')
   , mongoose = require('mongoose')
@@ -37,107 +51,103 @@ var WorldSchema = new Schema({
 }, { collection : 'world' });
 var MWorld = conn.model('World', WorldSchema);
 
-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');
+
+function getRandomNumber() {
+  return Math.floor(Math.random() * 10000) + 1;
+}
+
+function mongooseQuery(callback) {
+  MWorld.findOne({ id: getRandomNumber()}).exec(function (err, world) {
+    callback(err, world);
   });
-} else {
-  http.createServer(function (req, res) {
-
-    // JSON response object
-    var hello = {message: "Hello, world"};
-
-    var path = url.parse(req.url).pathname;
-    if (path === '/json') {
-      // JSON Response Test
-      res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
-      // Write JSON object to response
-      res.end(JSON.stringify(hello));
-    } else if (path === '/mongoose') {
-      // Database Test
-      var queries = 1,
-        worlds  = [],
-        queryFunctions = [],
-        values = url.parse(req.url, true);
-
-      if (values.query.queries) {
-        queries = values.query.queries;
-      }
+}
+
+function sequelizeQuery(callback) {
+  World.find(getRandomNumber()).success(function (world) {
+    callback(null, world);
+  });
+}
 
-      res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
+http.createServer(function (req, res) {
+  // JSON response object
+  var hello = {message: "Hello, world"};
 
-      for (var i = 1; i <= queries; i++ ) {
-        queryFunctions.push(function(callback) {
-          MWorld.findOne({ id: (Math.floor(Math.random() * 10000) + 1 )}).exec(function (err, world) {
-            worlds.push(world);
-            callback(null, 'success');
-          });
-        });
-      }
+  var path = url.parse(req.url).pathname;
 
-      async.parallel(queryFunctions, function(err, results) {
-        res.end(JSON.stringify(worlds));
-      });
-    } else if (path === '/sequelize') {
-      var queries = 1,
-        worlds  = [],
-        queryFunctions = [],
-        values = url.parse(req.url, true);
-
-      if ( values.query.queries ) {
-        queries = values.query.queries;
-      }
+  switch (path) {
+  case '/json':
+    // JSON Response Test
+    res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
+    // Write JSON object to response
+    res.end(JSON.stringify(hello));
+    break;
+
+  case '/mongoose':
+    // Database Test
+    var values = url.parse(req.url, true);
+    var queries = values.query.queries || 1;
+    var queryFunctions = new Array(queries);
+
+    for (var i = 0; i < queries; i += 1) {
+      queryFunctions[i] = mongooseQuery;
+    }
+
+    res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
+
+    async.parallel(queryFunctions, function(err, results) {
+      res.end(JSON.stringify(results));
+    });
+    break;
+
+  case '/sequelize':
+    var values = url.parse(req.url, true);
+    var queries = values.query.queries || 1;
+    var queryFunctions = new Array(queries);
 
-      res.writeHead(200, {'Content-Type': 'application/json'});
+    for (var i = 0; i < queries; i += 1) {
+      queryFunctions[i] = sequelizeQuery;
+    }
+
+    res.writeHead(200, {'Content-Type': 'application/json'});
+
+    async.parallel(queryFunctions, function(err, results) {
+      res.end(JSON.stringify(results));
+    });
+    break;
+
+  case '/mysql':
+    res.writeHead(200, {'Content-Type': 'application/json'});
+    
+    pool.getConnection(function(err, connection) {
+      if (err || !connection) {
+        return res.end('MYSQL CONNECTION ERROR.');
+      } 
 
-      for (var i = 1; i <= queries; i++ ) {
-        queryFunctions.push(function(callback) {
-          World.find(Math.floor(Math.random()*10000) + 1).success(function(world) {
-            worlds.push(world);
-            callback(null, 'success');
-          });
+      function mysqlQuery(callback) {
+        connection.query("SELECT * FROM World WHERE id = " + getRandomNumber(), function(err, rows) {
+          callback(null, rows[0]);
         });
       }
 
-      async.parallel(queryFunctions, function(err, results) {
-        res.end(JSON.stringify(worlds));
-      });
-    }  else if (path === '/mysql') {
-      var queries = 1,
-        worlds  = [],
-        queryFunctions = [],
-        values = url.parse(req.url, true);
-
-      if ( values.query.queries ) {
-        queries = values.query.queries;
+      var values = url.parse(req.url, true);
+      var queries = values.query.queries || 1;
+      var queryFunctions = new Array(queries);
+
+      for (var i = 0; i < queries; i += 1) {
+        queryFunctions[i] = mysqlQuery;
       }
 
-      res.writeHead(200, {'Content-Type': 'application/json'});
-      
-      pool.getConnection(function(err, connection) {
-        for (var i = 1; i <= queries; i++ ) {
-          queryFunctions.push(function(callback) {
-            connection.query("SELECT * FROM World WHERE id = " + (Math.floor(Math.random()*10000) + 1), function(err, rows) {
-              worlds.push(rows[0]);
-              callback(null, 'success');
-            });
-          });
-        }
-
-        async.parallel(queryFunctions, function(err, results) {
-          res.end(JSON.stringify(worlds));
-          connection.end();
-        });
+      async.parallel(queryFunctions, function(err, results) {
+        res.end(JSON.stringify(results));
+        connection.end();
       });
-    } else {
-      // File not found handler
-      res.writeHead(404, {'Content-Type': 'text/html; charset=UTF-8'});
-      res.end("NOT IMPLEMENTED");
-    }
-  }).listen(8080);
-}
+    });
+    break;
+
+  default:
+    // File not found handler
+    res.writeHead(404, {'Content-Type': 'text/html; charset=UTF-8'});
+    res.end("NOT IMPLEMENTED");
+  }
+}).listen(8080);

+ 2 - 1
nodejs/package.json

@@ -8,4 +8,5 @@
     , "async": "0.2.5"
     , "mysql": "2.0.0-alpha7"
   }
-}
+  , "main": "hello.js"
+}