Я разрабатываю приложение. Сервер 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 ){
Or:
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