Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js express server中的mongodb连接机制_Node.js_Mongodb_Express_Connection_Monk - Fatal编程技术网

Node.js express server中的mongodb连接机制

Node.js express server中的mongodb连接机制,node.js,mongodb,express,connection,monk,Node.js,Mongodb,Express,Connection,Monk,我的服务器一次需要处理太多的请求(例如:100个请求/秒),它涉及db(mongodb)操作。为了实现这一点,我选择了expressserver来处理这些请求。我用express设置了服务器。这里我只想为整个服务器创建一个db连接 要实现这一目标: 在app.js中 var mongo = require('mongodb'); var monk = require('monk'); var db = monk('localhost:27017/testdb1'); app.use(funct

我的服务器一次需要处理太多的请求(例如:100个请求/秒),它涉及db(mongodb)操作。为了实现这一点,我选择了expressserver来处理这些请求。我用express设置了服务器。这里我只想为整个服务器创建一个db连接

要实现这一目标: 在app.js中

var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/testdb1');

app.use(function (req, res, next) {
    req.db1 = db;
    //console.log(req.db1);
    next();
});
在routes.js中

router.get('/user', function (req, res) {
    if (req) {        
     find = {};
     var db1 = req.db1;
     var userCollection = db1.get(collections.user);
     var testCollection1 = db1.get(collections.testTable1);
     var testCollection2 = db1.get(collections.testTable2);

     userCollection.find(find, function (err, doc) {
         console.log('1');
     });
     testCollection1.find(find, function (err, doc) {
           console.log('2');
     });
     testCollection2.find(find, function (err, doc) {
           console.log('3');
     });
    }
});
问题是:

让当前mongodb连接(cmc)=1; 服务器在提升时创建一个连接(cmc++)。当我请求路由(/user)时,将首次创建另一个连接(cmc++)。当我再次发出请求时,会再创建一个连接(cmc++)。之后,尽管我向该路由发出了许多请求,但计数保持不变(cmc=4)。那里到底发生了什么? 当提出请求时,我需要更新更多集合。随着集合上操作数量的增加,连接计数也在增加。
为什么连接计数在增加。我只想创建一个连接。

这些连接计数的确切来源是哪里?看来你的计数方法可能有缺陷。你似乎也没有意识到,上面显示的“三个”电话很可能需要“三个”连接,因为它们实际上是并行的。如果您希望它们一个接一个地“阻塞”,那么异步编程就不是这样(有意地)工作的。我认为这是你的主要问题。对异步方法和回调进行更多的研究以了解它们,我从“db.serverStatus.connections”中获取连接计数。通过使用回调,计数不会增加(在执行回调后实现)。因此,执行可能需要很长时间(5错误数据计数收集)。这就是我使用并行连接的原因。我的主要疑问是,与其不使用单个db连接,不如说它为什么要创建另一个连接。