nodo-mongodb-nativo MongoClient cerrando inesperadamente las conexiones

He estado buscando mucho por conexiones cerradas inesperadamente en mongodb pero solo puedo encontrar preguntas de personas que QUIEREN que se cierren sus conexiones.

Estoy usando node-mongodb-native para conectarme a una base de datos, pero sigo recibiendo mensajes aparentemente aleatorios de “Error: conexión cerrada”. Si rebash manualmente la solicitud (actualización del navegador), la solicitud funciona.

¿Alguna idea que está causando esto? ¿Hay alguna opción simple que ayude?

Estoy recibiendo mi mango db usando:

MongoClient.connect(connection_string, { auto_reconnect: true }, function (err, db) { //server code/routes in here } 

Estaba buscando en https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/connection/server.js pero me doy cuenta de que mi comprensión limitada de cómo se gestionan los grupos de conexiones en general me está fallando arriba. Tenía la impresión de que permanecerían abiertos durante la vida útil de mi servidor. ¿Alguien puede ayudar?

Edit: Después de leer los comentarios de mjhm, comencé a analizar más profundamente el mantenimiento de TCP. Tropezó con algunos sitios que sugieren que esto podría estar haciendo Azure (¡y esta pregunta ahora está mal clasificada!). Al parecer, el equilibrador de carga de Azure mata las conexiones después de 1 minuto de actividad. Estoy usando los sitios web de Azure, por lo que puede o no aplicarse, pero creo que esta idea es lo suficientemente prometedora para comenzar una nueva línea de investigación. Más detalles aquí http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details.aspx

De: http://christiankvalheim.com/post/32209721702/tcp-keepalive

TCP keepalive Una cosa que surge con bastante frecuencia como una pregunta al usar el controlador mongodb node.js es un socket que deja de responder. Esto suele tener dos fonts.

Hay un firewall entre la aplicación y la instancia de mongodb y no observa keepAlive.

El tiempo de espera del zócalo es demasiado alto en su sistema, dejando el zócalo colgando y nunca cerrando. La primera situación se puede remediar configurando las opciones de conexión de socket y habilitando keepAlive y estableciendo un valor de tiempo de espera difícil en el socket. Esto asegurará que un firewall configurado correctamente mantendrá la conexión activa y, si no lo hace, se desactivará. La otra cosa que ajustar es el sistema operativo tcp_keepalive_time. Básicamente es demasiado alto para algo como MongoDB (2 horas predeterminadas en Linux). La configuración de este valor más bajo hará que se agoten los sockets muertos y permitirá que el controlador se recupere.

Un buen enlace para leer más al respecto. http://www.mongodb.org/display/DOCS/Troubleshooting#Troubleshooting- Socketerrorsinsharded clustersandreplicasets