Node.js和MongoDB:关闭连接

8

我正在尝试使用node.js和mongodb,并遵循http://howtonode.org/express-mongodb上的教程。

打开连接的代码如下:

ArticleProvider = function(host, port) {
 this.db= new Db('node-mongo-blog', new Server(host, port, {auto_reconnect: true}, {}));
 this.db.open(function(){});
};

然而,我看不到任何连接被关闭。 但是当我在mongo控制台上查看日志时,我可以看到有一些连接被打开并在一段时间后关闭。

这个连接会自动关闭吗?当大量客户端尝试访问服务器时,会出现问题吗?应该在哪里关闭连接?

谢谢

Tuco

3个回答

6
在这个示例应用程序中,只有一个 ArticleProvider 对象被创建用于服务请求时共享。该对象的构造函数打开一个直到应用程序终止才关闭的 db 连接(这是可以的)。
所以你应该看到每次启动应用程序都会获得一个新的 mongo 连接,但无论有多少客户端访问服务器,都不会产生额外的连接。在您终止应用程序后不久,您应该看到它的连接在 mongo 方面消失。

2

node-mongodb-native 提供了一个 close 方法用于关闭 Db 对象,当您完成后可以调用它来关闭连接。

var that = this;
this.db.open(function(){
    // do db work here

    // close the connection
    that.db.close();
});

如果不关闭连接,事件循环将保持连接处于打开状态,您的进程不会退出。如果您正在构建一个 Web 服务器,您的进程将不会被终止,则不需要关闭连接。 node-mongodb-native 的更好参考资料可以在 https://github.com/mongodb/node-mongodb-native 上找到。

0

记得将db.close放在最后一个被执行的回调函数中,这样连接会一直保持打开状态,直到所有回调函数都执行完毕。否则,会出现错误,例如:

/usr/local/lib/node_modules/mongodb/lib/utils.js:97
    process.nextTick(function() { throw err; });
                                        ^
Error
    at Error.MongoError (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:13:17)
    at Server.destroy (/usr/local/lib/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:629:47)
    at Server.close (/usr/local/lib/node_modules/mongodb/lib/server.js:344:17)
    at Db.close (/usr/local/lib/node_modules/mongodb/lib/db.js:267:19)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接