2014-10-05 51 views
1

我正在开发一个应用程序。 MongoDB服务器托管在远程主机上。所以,我非常热衷于使用socketTimeoutMS: 30000来确保发生错误 - 并且我在应用程序中记录了问题。socketTimeoutMS不能在非常简单的环境中工作

我试着用URL设置MONGO_URLmongodb://localhost/ddd18?socketTimeoutMS=4000'

或使用该选项:

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

或者:在选项(如直{ socketOptions: { socketTimeoutMS: 6500, connectTimeoutMS: 6500 } }甚至{ socketTimeoutMS: 6500, connectTimeoutMS: 6500 }

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

或者其他组合。

如果我做到以下几点:

  • 运行我的应用程序(连接罚款的MongoDB)
  • 杀MongoDB的共
  • 尝试和执行操作

的尝试将挂起永远。实际上,它会挂在那里,然后当我最终重新启动MongoDB时,操作将实际启动并完成。

我遇到的问题是我的客户端有30秒的超时时间。如果服务器没有,而且由于某种原因它会沉默几分钟,那么客户报告为“失败”的所有操作都将实际发生 - 而且这很愚蠢。

我在做什么明显错误?

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

回答

0

的回答很简单:套接字未timeing出来。 auto_reconnect设置为true,服务器不停地尝试重新连接 - 而不是给了一个错误