【问题标题】:socketTimeoutMS not working in very simple environmentsocketTimeoutMS 在非常简单的环境中不起作用
【发布时间】:2014-11-29 17:45:38
【问题描述】:

我正在开发一个应用程序。 MongoDB 服务器托管在远程主机上。所以,我非常热衷于使用socketTimeoutMS: 30000 来确保引发错误——并且我可以在我的应用程序中记录问题。

我尝试使用 URL,将 MONGO_URL 设置为 mongodb://localhost/ddd18?socketTimeoutMS=4000'

或者使用选项:

require('mongodb').MongoClient.connect( process.env.MONGO_URL, { server: { socketOptions: { socketTimeoutMS: 6500, connectTimeoutMS: 6500 } } } , function( err, db ){

或者:

require('mongodb').MongoClient.connect( process.env.MONGO_URL, { mongos: { socketOptions: { socketTimeoutMS: 6500, connectTimeoutMS: 6500 } } } , function( err, db ){

或选项中的其他组合(如直接{ socketOptions: { socketTimeoutMS: 6500, connectTimeoutMS: 6500 } } 甚至{ socketTimeoutMS: 6500, connectTimeoutMS: 6500 })。

如果我执行以下操作:

  • 运行我的应用程序(可以很好地连接到 MongoDB)
  • 彻底杀死 MongoDB
  • 尝试执行操作

尝试将永远挂起。其实它会挂在那里,然后当我最终重新启动MongoDB时,操作就会真正开始并完成。

我遇到的问题是我的客户有 30 秒的超时。如果服务器不这样做,并且由于某种原因它静默了几分钟,那么客户端报告为“失败”的所有这些操作实际上都会发生——这很愚蠢。

我做错了什么吗?

相关文档:http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html

【问题讨论】:

    标签: node.js mongodb node-mongodb-native


    【解决方案1】:

    试试 serverSelectionTimeout (serverSelectionTimeoutMS)

    链接:https://www.mongodb.com/blog/post/server-selection-next-generation-mongodb-drivers

    现在(2015 年 9 月 20 日)中的官方 C# 驱动程序:https://www.nuget.org/packages/mongocsharpdriver/2.1.0-rc0

    【讨论】:

      【解决方案2】:

      答案很简单:套接字没有超时。 auto_reconnect 设置为 true,并且服务器继续尝试重新连接 - 并且没有给出错误

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-26
        • 2012-11-03
        相关资源
        最近更新 更多