当我的MongoDB连接空闲几分钟后,下一个请求将错误结束。从mongo命令行客户端,它看起来像这样:
mongo
> db.users.find() Sat Jan 12 23:42:35 Socket recv() errno:54 Connection reset by peer 107.22.25.25:47207 Sat Jan 12 23:42:35 SocketException: remote: 107.22.25.25:47207 error: 9001 socket exception [1] server [107.22.25.25:47207] Sat Jan 12 23:42:35 DBClientCursor::init call() failed Sat Jan 12 23:42:35 query failed : chowology.users {} to: ds047207.mongolab.com:47207 Error: error doing query: failed Sat Jan 12 23:42:35 trying reconnect to ds047207.mongolab.com:47207 Sat Jan 12 23:42:35 reconnect ds047207.mongolab.com:47207 ok
我看到针对MongoHQ和MongoLab的沙箱实例的问题。
由于重新连接,下一个请求通过正常。这是我的网络应用程序中的一个问题,因为几分钟不活动后,在网络请求期间将出现此错误。有两件事让我感到惊讶:
这是其他所有人的经验吗?应该如何处理?如果应用程序开发人员将其数据库操作包装在一些重试异常处理废话中,我会感到惊讶。
您想查看服务器对象的文档
http://mongodb.github.com/node-mongodb-native/api- generation/server.html#server
尤其是其中可以设置keepAlive和连接超时的socketOptions。默认情况下,keepalive关闭并且超时为0或从不,这意味着os默认套接字超时有效(从os到os有所不同)。保持活动状态会在tcp套接字连接下不时发送一次数据包,以使其保持活动状态。有时,防火墙配置错误,并且在关闭连接时不会发送结束数据包,从而使连接死机且陷入混乱,这就是人们一直在谈论的monoglabs(通常来说,它们配置得很糟糕)。