hello.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. var cluster = require('cluster')
  2. , numCPUs = require('os').cpus().length
  3. , windows = require('os').platform() == 'win32';
  4. if(cluster.isMaster) {
  5. // Fork workers.
  6. for (var i = 0; i < numCPUs; i++) {
  7. cluster.fork();
  8. }
  9. cluster.on('exit', function(worker, code, signal) {
  10. console.log('worker ' + worker.pid + ' died');
  11. });
  12. return;
  13. }
  14. var http = require('http')
  15. , url = require('url')
  16. , async = require('async')
  17. , mongoose = require('mongoose')
  18. , conn = mongoose.connect('mongodb://172.16.98.98/hello_world')
  19. , MongoClient = require('mongodb').MongoClient
  20. , connMap = { user: 'benchmarkdbuser', password: 'benchmarkdbpass', database: 'hello_world', host: 'localhost' };
  21. if (!windows) {
  22. var Mapper = require('mapper')
  23. , libmysql = require('mysql-libmysqlclient').createConnectionSync();
  24. Mapper.connect(connMap, {verbose: false, strict: false});
  25. var World = Mapper.map("World", "id", "randomNumber")
  26. libmysql.connectSync('localhost', 'benchmarkdbuser', 'benchmarkdbpass', 'hello_world');
  27. }
  28. var collection = null;
  29. MongoClient.connect('mongodb://172.16.98.98/hello_world?maxPoolSize=5', function(err, db) {
  30. collection = db.collection('world');
  31. });
  32. // define model
  33. var Schema = mongoose.Schema
  34. , ObjectId = Schema.ObjectId;
  35. var WorldSchema = new Schema({
  36. id : Number
  37. , randomNumber : Number
  38. }, { collection : 'world' });
  39. var MWorld = conn.model('World', WorldSchema);
  40. function getRandomNumber() {
  41. return Math.floor(Math.random() * 10000) + 1;
  42. }
  43. function mongooseQuery(callback) {
  44. MWorld.findOne({ id: getRandomNumber()}).exec(function (err, world) {
  45. callback(err, world);
  46. });
  47. }
  48. function mongodbDriverQuery(callback) {
  49. collection.findOne({ id: getRandomNumber()}, function(err, world) {
  50. callback(err, world);
  51. });
  52. }
  53. function sequelizeQuery(callback) {
  54. World.findById(getRandomNumber(), function (err, world) {
  55. callback(null, world);
  56. });
  57. }
  58. http.createServer(function (req, res) {
  59. // JSON response object
  60. var hello = {message: "Hello, world"};
  61. var path = url.parse(req.url).pathname;
  62. // mysql on windows is not supported
  63. if (windows && (path.substr(0, 3) == '/my' || path == '/update')) {
  64. path = '/doesntexist';
  65. }
  66. switch (path) {
  67. case '/json':
  68. // JSON Response Test
  69. res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
  70. // Write JSON object to response
  71. res.end(JSON.stringify(hello));
  72. break;
  73. case '/mongodbdriver':
  74. // Database Test
  75. var values = url.parse(req.url, true);
  76. var queries = values.query.queries || 1;
  77. var queryFunctions = new Array(queries);
  78. for (var i = 0; i < queries; i += 1) {
  79. queryFunctions[i] = mongodbDriverQuery;
  80. }
  81. res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
  82. async.parallel(queryFunctions, function(err, results) {
  83. res.end(JSON.stringify(results));
  84. });
  85. break;
  86. case '/mongoose':
  87. // Database Test
  88. var values = url.parse(req.url, true);
  89. var queries = values.query.queries || 1;
  90. var queryFunctions = new Array(queries);
  91. for (var i = 0; i < queries; i += 1) {
  92. queryFunctions[i] = mongooseQuery;
  93. }
  94. res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
  95. async.parallel(queryFunctions, function(err, results) {
  96. res.end(JSON.stringify(results));
  97. });
  98. break;
  99. case '/mysql-orm':
  100. var values = url.parse(req.url, true);
  101. var queries = values.query.queries || 1;
  102. var queryFunctions = new Array(queries);
  103. for (var i = 0; i < queries; i += 1) {
  104. queryFunctions[i] = sequelizeQuery;
  105. }
  106. res.writeHead(200, {'Content-Type': 'application/json'});
  107. async.parallel(queryFunctions, function(err, results) {
  108. res.end(JSON.stringify(results));
  109. });
  110. break;
  111. case '/mysql':
  112. res.writeHead(200, {'Content-Type': 'application/json'});
  113. function libmysqlQuery(callback) {
  114. libmysql.query("SELECT * FROM world WHERE id = " + getRandomNumber(), function (err, res) {
  115. if (err) {
  116. throw err;
  117. }
  118. res.fetchAll(function(err, rows) {
  119. if (err) {
  120. throw err;
  121. }
  122. res.freeSync();
  123. callback(null, rows[0]);
  124. });
  125. });
  126. }
  127. var values = url.parse(req.url, true);
  128. var queries = values.query.queries || 1;
  129. var queryFunctions = new Array(queries);
  130. for (var i = 0; i < queries; i += 1) {
  131. queryFunctions[i] = libmysqlQuery;
  132. }
  133. async.parallel(queryFunctions, function(err, results) {
  134. if (err) {
  135. res.writeHead(500);
  136. return res.end('MYSQL CONNECTION ERROR.');
  137. }
  138. res.end(JSON.stringify(results));
  139. });
  140. break;
  141. case '/update':
  142. res.writeHead(200, {'Content-Type': 'application/json'});
  143. function libmysqlQuery(callback) {
  144. libmysql.query("SELECT * FROM world WHERE id = " + getRandomNumber(), function (err, res) {
  145. if (err) {
  146. throw err;
  147. }
  148. res.fetchAll(function(err, rows) {
  149. if (err) {
  150. throw err;
  151. }
  152. res.freeSync();
  153. rows[0].randomNumber = getRandomNumber();
  154. libmysql.query("UPDATE World SET randomNumber = " + rows[0].randomNumber + " WHERE id = " + rows[0]['id'], function (err, res) {
  155. if (err) {
  156. throw err;
  157. }
  158. });
  159. callback(null, rows[0]);
  160. });
  161. });
  162. }
  163. var values = url.parse(req.url, true);
  164. var queries = values.query.queries || 1;
  165. var queryFunctions = new Array(queries);
  166. for (var i = 0; i < queries; i += 1) {
  167. queryFunctions[i] = libmysqlQuery;
  168. }
  169. async.parallel(queryFunctions, function(err, results) {
  170. if (err) {
  171. res.writeHead(500);
  172. return res.end('MYSQL CONNECTION ERROR.');
  173. }
  174. res.end(JSON.stringify(results));
  175. });
  176. break;
  177. default:
  178. // File not found handler
  179. res.writeHead(501, {'Content-Type': 'text/plain; charset=UTF-8'});
  180. res.end("NOT IMPLEMENTED");
  181. }
  182. }).listen(8080);