我有一个 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 循环 for (i = 0; i < 500000000; i++)
将运行直到完成,因此第一个请求在完成之前不会释放事件循环的控制。就像“忙碌的等待”
对你来说更好的测试就是推迟
return new Promise(function(resolve, reject) {
setTimeout( function () {
resolve(5000)
}, 5000 ) // run the given function in 5000ms
});
这样,事件循环将在第一个请求等待时启动第二个请求。因此,如果您同时请求它们,两者将同时完成。
关于javascript - Node.js 如何同时处理多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42971589/