我无法弄清楚为什么这段代码阻止/阻止服务器完成并发请求,因为我只使用异步代码。有人会抛光吗?
我正在使用mongoose流媒体功能!以下是快速路线。
function getChart(req, res, next) {
var stream = Model.find({}).stream({
transform: JSON.stringify
});
stream.on('data', function(record) {
res.write(record);
});
stream.on('end', function() {
res.end();
});
}
从数据库请求大约10000条记录时,可以验证问题,大约需要10秒钟。在此期间,我打开另一个标签并向任何其他路线发出请求,例如/home
,/home
的内容仅在第一个请求完成后立即到达!
修改
我刚刚进行了一些基本的测试(甚至将mongoose连接池设置为更高的值),现在我知道问题不在于mongoose,而在于nodejs本身或者可能是express。我创建了以下测试应用程序:
var express = require('express'),
http = require('http'),
app = express();
app.get('/', function(req, res, next) {
console.log('> Request received!');
setTimeout(function() {
console.log('> Request sent!');
res.send(200);
}, 5000);
});
app.listen(8000, function() {
console.log(' > APP LISTENING');
console.log(' > maxSockets: ' + http.globalAgent.maxSockets);
});
在第一次请求的5秒内,我在chrome上打开了更多3个标签并发出更多请求,只有在第一个请求发送后才会显示消息> Request received!
。
我将5
作为maxSockets
任何人都可以帮助我吗?