2014-10-05 58 views
1

我在写一个使用商店的Web应用程序。如果客户端在30秒内未收到响应,则认为该请求已停止并发生超时错误。在MongoDB中处理(长期)连接丢失

我试图让MongoDB做同样的事情。例如,如果连接断开1分钟,则驱动程序将尝试重新连接,并将挂起客户端请求,直到重新连接成功。所以,像socketTimeoutMS(我设法开始工作)在这里没有效果。

什么是最好的方式得到MongoDB N秒后请求“放弃”?

我想要的最后一件事情是给客户端一个超时错误 - 服务器在5分钟后实际完成请求!

回答

1

maxTimeMS选项在2.6推出:

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(); 
    }); 
}); 
+0

但是,这意味着我将不得不申请它的每个查询,对不对?另外,“游标的网络延迟和空闲时间不计入MaxTimeMS。” - 和网络延迟是我后... http://dba.stackexchange.com/questions/73939/mongodb-maxtimems-ignored – Merc 2014-10-06 23:25:27

+0

任何想法如何使用MaxTimeMS与findOne函数? – 2015-06-17 15:22:58