为什么这段代码阻止了另一个请求,因为我只使用异步函数?

时间:2014-02-25 16:22:26

标签: javascript node.js express mongoose

我无法弄清楚为什么这段代码阻止/阻止服务器完成并发请求,因为我只使用异步代码。有人会抛光吗?

我正在使用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

的数量

任何人都可以帮助我吗?

0 个答案:

没有答案