2012-09-11 87 views
8

estoy tratando de utilizar Node.js con mongodb y siguiendo el tutorial en http://howtonode.org/express-mongodbNode.js mongodb cerrar la conexión

El código para abrir la conexión es

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

sin embargo no puedo ver ninguna conexión estar cerrado Pero cuando veo los registros en la consola mongo, puedo ver que son conexiones que se abren y cierran después de un tiempo.

¿La conexión se cierra automáticamente? ¿Será un problema cuando un gran número de clientes intente acceder al servidor? ¿Dónde debería estar cerrada la conexión?

Gracias

Tuco

Respuesta

6

En esa aplicación de ejemplo, solo se crea un único objeto ArticleProvider para que la aplicación lo comparta cuando se atienden solicitudes. El constructor de ese objeto abre una conexión db que no se cerrará hasta que la aplicación finalice (lo cual está bien).

Entonces, lo que debería ver es que obtiene una nueva conexión mongo cada vez que inicia su aplicación, pero no se realizan conexiones adicionales sin importar cuántos clientes accedan al servidor. Y poco después de que finalice su aplicación, verá desaparecer su conexión en el lado de mongo.

2

node-mongodb-native proporciona un método para objetos cerca Db y se puede cerrar la conexión cuando haya terminado llamando a ella.

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

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

Si no cierra su conexión, el bucle de eventos mantiene la conexión abierta y su proceso no finaliza. Si está creando un servidor web donde su proceso no finalizará, no es necesario que cierre la conexión.

Puede encontrar una mejor referencia para node-mongodb-native en https://github.com/mongodb/node-mongodb-native.

0

Recuerde poner el db.close en la última devolución de llamada que se ejecuta para que la conexión esté abierta hasta que finalicen todas las devoluciones de llamada. De lo contrario, arroja un error como

/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) 
Cuestiones relacionadas