繁体   English   中英

Node.js如何同时处理多个请求

[英]How does Node.js deal with multiple requests at same time

我有一个Node.js应用程序,注意到当我同时向我的Node Api发送2个请求时,它们似乎已排队。 即,第二个请求的时间是第一个请求的时间加上第二个请求的时间(如果我只是自行触发该请求)。

所以我做了一个简单的测试:

app.get('/api/testpromise', function(req, res) {

    sess = req.session;

    var controller = new Controller(req, res, sess);

    controller.testPromise()
    .then(function(){
        controller.testPromise()
        .then(function(){
             res.status(200);
             res.json({});
        });
    })
})

testPromise()方法只是执行一个循环:

Controller.prototype.testPromise = function(callback){

    return new Promise(function(resolve, reject) {

        var count = 0;
        for (i = 0; i < 500000000; i++) {
            count++;
        }

      if(count) {
        resolve(count);
      } else {
        reject(count);
      }
    });

}

我从前端同时激发了2个“ testpromise”请求,第一个请求大约需要5秒才能完成,大约需要10秒。 因此,第二个似乎排在第一个之后。

我以为从阅读过的Node上我不会看到这样的行为? 据说Node非常擅长处理大量并发请求并将它们传递出去。 那么,这实际上如何工作?

您的测试正在使用阻塞的同步代码。 for (i = 0; i < 500000000; i++) for循环将一直运行到完成为止,因此第一个请求在完成之前不会释放对事件循环的控制。 就像一个“忙碌的等待”

对您来说,更好的测试是延迟

return new Promise(function(resolve, reject) {
    setTimeout( function () {
      resolve(5000) 
    }, 5000 ) // run the given function in 5000ms
});

这样,事件循环将在第一个请求等待时启动第二个请求。 因此,如果您同时请求它们,则两者将同时完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM