gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:43:33 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com