expressjs不是异步处理我的请求

Rya*_*ein 2 javascript asynchronous nonblocking node.js express

var data = import('./blahblah/data')
app.get('/data', data.getData)
app.listen(3000)
Run Code Online (Sandbox Code Playgroud)

// blahblah/data:
exports.getData = function(req, res) {
    setTimeout(function(){
        res.send('test')
    }, 10000)
};
Run Code Online (Sandbox Code Playgroud)

//code I use to test
for(var i = 0;i<10;i++){
    $.ajax({
      url: 'http://127.0.0.1:3000/data',
      success: function(l){console.log(l);}
    });
}
Run Code Online (Sandbox Code Playgroud)

如果我同时向该端点发送10个请求,那么它们每隔10秒就会收到一个回复​​,最后一个请求在发送第一个请求后110秒.当其他请求运行异步代码时,是不是nodejs和express应该让其他请求进行处理?

Leo*_*tny 6

你的代码很好,可能是你测试它的方式有问题.

请确保您并行发送请求.

我用实用程序测试了你的代码loadtest

loadtest -n 10 -c 10 http://localhost:3000/data
Run Code Online (Sandbox Code Playgroud)

并得到了预期的结果

Target URL:          http://localhost:3000/data
Max requests:        10
Concurrency level:   10
Agent:               none

Completed requests:  10
Total errors:        0
Total time:          10.050681130000001 s
Run Code Online (Sandbox Code Playgroud)

这是我测试过的代码:

var app = require('express')();
app.get('/data', function(req, res) {
    setTimeout(function(){
        res.send('test')
    },10000)
});
app.listen(3000)
Run Code Online (Sandbox Code Playgroud)

更新:

Web浏览器通常限制每个主机的并行请求数.我刚刚在我的谷歌浏览器中对其进行了测试,它将并行请求的数量限制为6:

在此输入图像描述

以下是延迟请求之一的详细时间:

在此输入图像描述

看起来您的浏览器有更严格的限制.