Nodejs MongoDB连接池如何工作?

Raj*_*Raj 5 connection connection-pooling mongodb node.js

在以下代码中,mongoClient.connect调用(默认情况下)打开一个包含5个连接的池.由于Node是单线程的,因此只能进行一次调用(func1或func2可以随时处理(第二次调用等待第一次调用完成).因此,只使用池中五个连接中的一个.

使用Nodejs集群,如果我们分叉多个实例,每个实例都会打开它自己的连接池(每个实例5个连接).

问题是 - MongoDB连接池如何在Node环境中工作.我们如何测试这个来演示同时使用同一个池中的多个连接?

mongoClient.connect('mongodb://localhost', function(err, db){
  app.get('/func1', function(req, res){
    for (var i=0; i<100000; i++){
      db.collection('test').insert({a:i});
    }
    res.end();
  });

  app.get('/func2', function(req, res){
    for (var i=0; i<100000; i++){
      db.collection('test').insert({a:i});
    }
    res.end();
  });
});
Run Code Online (Sandbox Code Playgroud)

Joh*_*yHK 1

insert是异步的,因此/func1/func2处理程序都只是将 100000 个插入排队然后返回。然后,连接池在后台运行,一次执行不超过 5 个插入(池中每个连接 1 个)。