Nodejs is very fast, at least faster than java and c#, here is my test case:
- JMeter send rest api request from Tai Wai to Mong Kok, below is the trace route
/Users/peter>traceroute 210.5.164.14
traceroute to 210.5.164.14 (210.5.164.14), 64 hops max, 52 byte packets
1 192.168.10.1 (192.168.10.1) 2.463 ms 3.169 ms 0.995 ms
2 058176102001.ctinets.com (58.176.102.1) 1.937 ms 2.291 ms 3.107 ms
3 10.239.62.109 (10.239.62.109) 3.146 ms 3.196 ms 3.071 ms
4 014199252053.ctinets.com (14.199.252.53) 7.214 ms 5.729 ms 3.998 ms
5 014136128118.ctinets.com (14.136.128.118) 3.191 ms 1.983 ms 1.980 ms
6 newtt4-10g.hkix.net (123.255.91.243) 3.834 ms 3.466 ms 4.204 ms
7 115.160.187.115 (115.160.187.115) 4.708 ms 6.820 ms 5.003 ms
8 175.45.53.210 (175.45.53.210) 20.109 ms 7.609 ms 4.958 ms
9 210.5.164.14 (210.5.164.14) 5.558 ms 6.597 ms 7.165 ms[/code - Jmeter settings are 8 threads, 100 request per thread
- API get the username and password from post, read the db and check the password is correct or not, return a json string
- I use sequelize as ORM, no tuning. Mysql also no tuning
Here is the result, most of the response below 20ms, 50% of the response below 10%, remember one thing i didn't tune my network, code, database and OS !!!
Here is the server side code:
var db = require('../db')
exports.test = function(req, res) {
res.json({
message : "First API!"
});
};
exports.register = function(req, res) {
var parameters = [ 'email', 'age', 'gender', 'password' ];
for ( var p in parameters) {
if (req.body[parameters[p]] == null) {
return res.send('Error, parameter ' + parameters[p] + ' is missing');
}
}
db.User.findAndCountAll({
where: {
email: {
$like: req.body.email.toLowerCase()
}
}
}).then(function(result) {
if (result.count==0){
console.log(result.rows);
var user = db.User.build({
email : req.body.email.toLowerCase(),
age : req.body.age,
gender : req.body.gender,
password : req.body.password
});
user.save().then(function() {
res.json({
message : "Register API",
status : "ok"
});
}).catch(function(error){
res.json({
message : "Error : "+error,
status : "error"
});
});
}else{
res.json({
message : "User already exist",
status : "error"
});
}
});
};
exports.login = function(req, res) {
var parameters = [ 'email', 'password' ];
for ( var p in parameters) {
if (req.body[parameters[p]] == null) {
return res.send('Error, parameter ' + parameters[p] + ' is missing');
}
}
db.User.findAndCountAll({
where: {
$and: [
{
email: {
$like: req.body.email.toLowerCase()
},
password: {
$like: req.body.password
}
}
]
}
}).then(function(result) {
if (result.count==1){
res.json({
message : "Login successfully",
status : "ok"
});
}else{
res.json({
message : "Login failed",
status : "error"
});
}
});
};
exports.getChatMessage = function(req, res) {
var parameters = [ 'number', 'highestChatNo' ];
for ( var p in parameters) {
if (req.body[parameters[p]] == null) {
return res.send('Error, parameter ' + parameters[p] + ' is missing');
}
}
db.Message.findAll({
where: {
$and: [
{
room: {
$like: req.body.room
},
id: {
ge: req.body.highestChatNo
}
}
]
}
}).then(function(result) {
res.json(result);
});
};
exports.getHotRooms = function(req, res) {
db.Stock.findAll({ limit: 8 }).then(function(result) {
res.json(result);
});
};

