处理MongoDB与Node断开连接/重新连接的问题

当我的MongoDB连接空闲几分钟后,下一个请求将错误结束。从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的沙箱实例的问题。

由于重新连接,下一个请求通过正常。这是我的网络应用程序中的一个问题,因为几分钟不活动后,在网络请求期间将出现此错误。有两件事让我感到惊讶:

  1. MongoDB连接被如此频繁和频繁地破坏,并且
  2. 驱动程序只是引发一个异常,而不是在重新连接后自动重试(我正在使用connect-mongo,该连接使用mongoose,而mongoose依次使用node-mongodb-native)。

这是其他所有人的经验吗?应该如何处理?如果应用程序开发人员将其数据库操作包装在一些重试异常处理废话中,我会感到惊讶。

回答:

您想查看服务器对象的文档

http://mongodb.github.com/node-mongodb-native/api-

generation/server.html#server

尤其是其中可以设置keepAlive和连接超时的socketOptions。默认情况下,keepalive关闭并且超时为0或从不,这意味着os默认套接字超时有效(从os到os有所不同)。保持活动状态会在tcp套接字连接下不时发送一次数据包,以使其保持活动状态。有时,防火墙配置错误,并且在关闭连接时不会发送结束数据包,从而使连接死机且陷入混乱,这就是人们一直在谈论的monoglabs(通常来说,它们配置得很糟糕)。

以上是 处理MongoDB与Node断开连接/重新连接的问题 的全部内容, 来源链接: utcz.com/qa/428719.html

回到顶部