node-mongodb-native MongoClient意外closures连接

我一直在寻找很多mongodb中意外closures的连接,但是只能从想要closures连接的人那里find问题。

我正在使用node-mongodb-native连接到一个数据库,但我一直在看似随机的“错误:连接closures”消息。 如果我手动重试请求(浏览器刷新)请求的作品。

任何想法是什么造成这个? 有一些简单的选项,将有助于?

我得到我的数据库句柄使用:

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

我正在通过https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/connection/server.js查看,但是我意识到我对连接池的pipe理方式的理解有限,向上。 我的印象是他们在我的服务器的一生中保持开放。 有人可以帮忙吗?

编辑:在阅读mjhm的评论之后,我开始更深入地研究TCP保持活力。 偶然发现了一些网站,说这可能是Azure的做法(现在这个问题被错误分类了!)。 显然,Azure负载平衡器在1分钟的活动之后终止连接。 我正在使用Azure网站,因此可能适用,也可能不适用,但我认为这种洞察力足以启动一个新的调查线。 更多细节在这里http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details.aspx

       

网上收集的解决方案 "node-mongodb-native MongoClient意外closures连接"

来自: http : //christiankvalheim.com/post/32209721702/tcp-keepalive

TCP keepalive当使用mongodb node.js驱动程序时,出现一个相当频繁的问题是一个停止响应的套接字。 这通常有两个来源。

在应用程序和mongodb实例之间有一个防火墙,它不遵守keepAlive。

系统上的套接字超时时间过长,导致套接字挂起而永不closures。 第一种情况可以通过设置套接字连接选项并启用keepAlive并在套接字上设置硬超时值来解决。 这将确保正确configuration的防火墙将保持连接活动,如果没有,它将超时。 另一个要调整的是tcp_keepalive_time。 基本上这是很高的MongoDB的东西(在Linux上默认2小时)。 设置这个更低的值将正确地超时死锁,并让驱动程序恢复。

一个很好的链接来阅读更多关于它。 http://www.mongodb.org/display/DOCS/Troubleshooting#Troubleshooting-Socketerrorsinshardedclustersandreplicasets