我正在编写一个使用存储的web应用程序。如果客户端在30秒内没有收到响应,则会认为请求已终止,并给出超时错误。
我正试图让MongoDB做同样的事情。例如,如果连接中断1分钟,驱动程序将尝试重新连接,并将客户端的请求挂起,直到重新连接成功。所以,像socketTimeoutMS
(我设法开始工作)这样的东西在这里并不有效。
让MongoDB在N秒后"放弃"请求的最佳方法是什么?
我最不想做的就是给客户端一个超时错误——服务器实际上在5分钟后完成了请求!
2.6中引入了maxTimeMS
选项:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
// Get an aggregation cursor
var cursor = db.collection('data')
.find("$where": "sleep(1000) || true")
.maxTimeMS(50);
// Get alll the items
cursor.toArray(function(err, items) {
console.dir(err);
console.dir(items);
db.close();
});
});