expressjs 没有异步处理我的请求
expressjs is not asynchronously processing my requests
var data = import('./blahblah/data')
app.get('/data', data.getData)
app.listen(3000)
// blahblah/data:
exports.getData = function(req, res) {
setTimeout(function(){
res.send('test')
}, 10000)
};
//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);}
});
}
如果我同时向此端点发送 10 个请求,那么它们每次只会收到一个回复,间隔 10 秒,最后一个请求在第一个请求发送后 110 秒到来。当其他请求是 运行 异步代码时,nodejs 和 express 不应该让其他请求处理吗?
您的代码没问题,可能是您测试它的方式有问题。
请确保您并行发送请求。
测试了你的代码
loadtest -n 10 -c 10 http://localhost:3000/data
并得到了预期的结果
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
这是我测试过的代码片段:
var app = require('express')();
app.get('/data', function(req, res) {
setTimeout(function(){
res.send('test')
},10000)
});
app.listen(3000)
更新:
Web 浏览器通常会限制每个主机的并行请求数。我刚刚在我的 Google Chrome 中对其进行了测试,它将并行请求的数量限制为 6:
以下是延迟请求之一的详细时间安排:
看来您的浏览器有更严格的限制。
var data = import('./blahblah/data')
app.get('/data', data.getData)
app.listen(3000)
// blahblah/data:
exports.getData = function(req, res) {
setTimeout(function(){
res.send('test')
}, 10000)
};
//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);}
});
}
如果我同时向此端点发送 10 个请求,那么它们每次只会收到一个回复,间隔 10 秒,最后一个请求在第一个请求发送后 110 秒到来。当其他请求是 运行 异步代码时,nodejs 和 express 不应该让其他请求处理吗?
您的代码没问题,可能是您测试它的方式有问题。
请确保您并行发送请求。
测试了你的代码loadtest -n 10 -c 10 http://localhost:3000/data
并得到了预期的结果
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
这是我测试过的代码片段:
var app = require('express')();
app.get('/data', function(req, res) {
setTimeout(function(){
res.send('test')
},10000)
});
app.listen(3000)
更新:
Web 浏览器通常会限制每个主机的并行请求数。我刚刚在我的 Google Chrome 中对其进行了测试,它将并行请求的数量限制为 6:
以下是延迟请求之一的详细时间安排:
看来您的浏览器有更严格的限制。