我正在测试express.js服务器应用程序的性能,并且要花费太多时间(最多15秒)来处理1000个简单请求。
我已经编写了一个简单的nodejs express api,以便在将来的大型负载密集型api中实现它。该API可以完美运行,但是一旦我处理大量并发请求,性能就达不到预期。 未来的预期情况是成千上万的用户在1-5秒的时间内不停地发送请求,因此这是至关重要的部分。
我编写了另一个脚本以几乎立即从我自己的工作站(本地主机,数据包未到达网络)发送50、500、1000 ....请求,并将api设置为处理该请求,然后单击“确定”进行应答。
var express = require('express');
var super_router = express.Router();
super_router.use('/playground', function(req, res, next){
res.json('OK');
});
处理100个请求所需的时间为3秒,500个请求15秒,依此类推。 考虑到CPU永远不会达到50%,因此预期的性能不是理想的。 我还尝试过将请求的发送数量分成更多发送者脚本,但结果完全相同。
没有集群的Express.js的预期数量是这些吗?
我正在测试的脚本:
var request = require('request');
let url = "http://localhost:3000/playground";
let requestsNumber = 5000;
(async () => {
try {
console.log(' ## INIT ##');
let date0 = new Date().getTime();
await makeAllRequests();
console.log('Elapsed ms: '+(new Date().getTime()-date0));
console.log('DONE')
} catch (e) {
console.log(e);
}
})();
async function makeAllRequests(){
let promises = [];
for(let i=0;i<requestsNumber;i++){
promises.push(makeRequest());
}
console.log('Finish sending requests')
return Promise.all(promises);
}
async function makeRequest(){
return new Promise(resolve => {
request.get(
url,
function optionalCallback(err, httpResponse, body) {
if (err){
console.error('Error:', err);
}
resolve();
});
})
}