Express.js花费大量时间来处理1000个简单请求

时间:2019-07-17 12:45:50

标签: javascript node.js performance express performance-testing

我正在测试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();
            });
    })
}

0 个答案:

没有答案