hello.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. /**
  2. * Module dependencies.
  3. */
  4. var cluster = require('cluster')
  5. , numCPUs = require('os').cpus().length
  6. , http = require('http')
  7. , url = require('url')
  8. , Sequelize = require('sequelize')
  9. , async = require('async')
  10. , mongoose = require('mongoose')
  11. , conn = mongoose.connect('mongodb://localhost/hello_world')
  12. , MongoClient = require('mongodb').MongoClient;
  13. var collection = null;
  14. MongoClient.connect('mongodb://localhost/hello_world?maxPoolSize=5', function(err, db) {
  15. collection = db.collection('world');
  16. });
  17. var WorldSchema = new mongoose.Schema({
  18. id : Number,
  19. randomNumber: Number
  20. }, {
  21. collection: 'world'
  22. }),
  23. MWorld = conn.model('World', WorldSchema);
  24. // Helper functions
  25. function getRandomNumber() {
  26. return Math.floor(Math.random() * 10000) + 1;
  27. }
  28. function mongooseQuery(callback) {
  29. MWorld.findOne({ id: getRandomNumber()}).exec(function (err, world) {
  30. callback(err, world);
  31. });
  32. }
  33. function mongodbDriverQuery(callback) {
  34. collection.findOne({ id: getRandomNumber()}, function(err, world) {
  35. callback(err, world);
  36. });
  37. }
  38. function mongodbDriverUpdateQuery(callback) {
  39. collection.findAndModify({ id: getRandomNumber()}, [['_id','asc']], {$set: {randomNumber: getRandomNumber()}}, {}, function(err, world) {
  40. callback(err, world && world.value);
  41. });
  42. }
  43. function sequelizeQuery(callback) {
  44. World.findById(getRandomNumber(), function (err, world) {
  45. callback(null, world);
  46. });
  47. }
  48. if(cluster.isMaster) {
  49. // Fork workers.
  50. for (var i = 0; i < numCPUs; i++) {
  51. cluster.fork();
  52. }
  53. cluster.on('exit', function(worker, code, signal) {
  54. console.log('worker ' + worker.pid + ' died');
  55. });
  56. return;
  57. } else {
  58. http.createServer(function (req, res) {
  59. // JSON response object
  60. var hello = {message: "Hello, World!"};
  61. var helloStr = "Hello, World!";
  62. var path = url.parse(req.url).pathname;
  63. switch (path) {
  64. case '/json':
  65. res.writeHead(200, {
  66. 'Content-Type': 'application/json',
  67. 'Server': 'Node'
  68. });
  69. res.end(JSON.stringify(hello));
  70. break;
  71. case '/plaintext':
  72. // JSON Response Test
  73. res.writeHead(200, {'Content-Type': 'text/plain; charset=UTF-8'});
  74. // Write JSON object to response
  75. res.end(helloStr);
  76. break;
  77. case '/mongodbdriver':
  78. // Database Test
  79. var values = url.parse(req.url, true);
  80. var queries = Math.min(Math.max(values.query.queries, 1), 500);
  81. var queryFunctions = new Array(queries);
  82. for (var i = 0; i < queries; i += 1) {
  83. queryFunctions[i] = mongodbDriverQuery;
  84. }
  85. async.parallel(queryFunctions, function(err, results) {
  86. if (!values.query.queries) {
  87. results = results[0];
  88. }
  89. res.writeHead(200, {
  90. 'Content-Type': 'application/json',
  91. 'Server': 'Node'
  92. });
  93. res.end(JSON.stringify(results));
  94. });
  95. break;
  96. case '/mongoose':
  97. // Database Test
  98. var values = url.parse(req.url, true);
  99. var queries = Math.min(Math.max(values.query.queries, 1), 500);
  100. var queryFunctions = new Array(queries);
  101. for (var i = 0; i < queries; i += 1) {
  102. queryFunctions[i] = mongooseQuery;
  103. }
  104. async.parallel(queryFunctions, function(err, results) {
  105. if (!values.query.queries) {
  106. results = results[0];
  107. }
  108. res.writeHead(200, {
  109. 'Content-Type': 'application/json',
  110. 'Server': 'Node'
  111. });
  112. res.end(JSON.stringify(results));
  113. });
  114. break;
  115. case '/mysql-orm':
  116. var values = url.parse(req.url, true);
  117. var queries = Math.min(Math.max(values.query.queries, 1), 500);
  118. var queryFunctions = new Array(queries);
  119. for (var i = 0; i < queries; i += 1) {
  120. queryFunctions[i] = sequelizeQuery;
  121. }
  122. async.parallel(queryFunctions, function(err, results) {
  123. if (queries == 1) {
  124. results = results[0];
  125. }
  126. res.writeHead(200, {
  127. 'Content-Type': 'application/json',
  128. 'Server': 'Node'
  129. });
  130. res.end(JSON.stringify(results));
  131. });
  132. break;
  133. case '/mysql':
  134. function libmysqlQuery(callback) {
  135. libmysql.query("SELECT * FROM world WHERE id = " + getRandomNumber(), function (err, res) {
  136. if (err) {
  137. throw err;
  138. }
  139. res.fetchAll(function(err, rows) {
  140. if (err) {
  141. throw err;
  142. }
  143. res.freeSync();
  144. callback(null, rows[0]);
  145. });
  146. });
  147. }
  148. var values = url.parse(req.url, true);
  149. var queries = values.query.queries || 1;
  150. var queryFunctions = new Array(queries);
  151. for (var i = 0; i < queries; i += 1) {
  152. queryFunctions[i] = libmysqlQuery;
  153. }
  154. async.parallel(queryFunctions, function(err, results) {
  155. if (err) {
  156. res.writeHead(500);
  157. return res.end('MYSQL CONNECTION ERROR.');
  158. }
  159. if (!values.query.queries) {
  160. results = results[0];
  161. }
  162. res.writeHead(200, {
  163. 'Content-Type': 'application/json',
  164. 'Server': 'Node'
  165. });
  166. res.end(JSON.stringify(results));
  167. });
  168. break;
  169. case '/update':
  170. function libmysqlQuery(callback) {
  171. libmysql.query("SELECT * FROM world WHERE id = " + getRandomNumber(), function (err, res) {
  172. if (err) {
  173. throw err;
  174. }
  175. res.fetchAll(function(err, rows) {
  176. if (err) {
  177. throw err;
  178. }
  179. res.freeSync();
  180. rows[0].randomNumber = getRandomNumber();
  181. libmysql.query("UPDATE World SET randomNumber = " + rows[0].randomNumber + " WHERE id = " + rows[0]['id'], function (err, res) {
  182. if (err) {
  183. throw err;
  184. }
  185. callback(null, rows[0]);
  186. });
  187. });
  188. });
  189. }
  190. var values = url.parse(req.url, true);
  191. var queries = values.query.queries || 1;
  192. if(queries < 1) {
  193. queries = 1;
  194. } else if(queries > 500) {
  195. queries = 500;
  196. }
  197. var queryFunctions = new Array(queries);
  198. for (var i = 0; i < queries; i += 1) {
  199. queryFunctions[i] = libmysqlQuery;
  200. }
  201. async.parallel(queryFunctions, function(err, results) {
  202. if (err) {
  203. res.writeHead(500);
  204. return res.end('MYSQL CONNECTION ERROR.');
  205. }
  206. res.writeHead(200, {
  207. 'Content-Type': 'application/json',
  208. 'Server': 'Node'
  209. });
  210. res.end(JSON.stringify(results));
  211. });
  212. break;
  213. case '/update-mongodb':
  214. // Database Test
  215. var values = url.parse(req.url, true);
  216. var queries = values.query.queries || 1;
  217. if (queries < 1) {
  218. queries = 1;
  219. } else if (queries > 500) {
  220. queries = 500;
  221. }
  222. var queryFunctions = new Array(queries);
  223. for (var i = 0; i < queries; i += 1) {
  224. queryFunctions[i] = mongodbDriverUpdateQuery;
  225. }
  226. async.parallel(queryFunctions, function(err, results) {
  227. res.writeHead(200, {
  228. 'Content-Type': 'application/json',
  229. 'Server': 'Node'
  230. });
  231. res.end(JSON.stringify(results));
  232. });
  233. break;
  234. default:
  235. // File not found handler
  236. res.writeHead(501, {'Content-Type': 'text/plain; charset=UTF-8'});
  237. res.end("NOT IMPLEMENTED");
  238. }
  239. }).listen(8080);
  240. }