[英]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.