我试图在nodejs和mongodb服务器之间丢失连接时,我正在尝试获得"连接丢失"或类似的东西。我使用本地驱动程序,并具有以下代码
var mongo = require('mongodb');
var server = new mongo.Server('host', 'port', {
auto_reconnect: true,
socketOptions: {
keepAlive: 10,
connectTimeoutMS: 1000,
socketTimeoutMS: 0
}
});
var db = new mongo.Db(
'dbname',
server,
{
w: 1,
wtimeout: 1000,
numberOfRetries: 100,
auto_reconnect: true
}
);
db.on('close', function () {
console.log('Error...close');
});
db.on('error', function (err) {
console.log('Error...error', err);
});
db.on('disconnect', function (err) {
console.log('Error...disconnect', err);
});
db.on('disconnected', function (err) {
console.log('Error...disconnected', err);
});
db.on('parseError', function (err) {
console.log('Error...parse', err);
});
db.on('timeout', function (err) {
console.log('Error...timeout', err);
});
db.collection('collectionName',function(err, collection){
if(err){
console.log('Error...collection', err);
return;
}
// set breakpoint here and break connection to mongo db server
collection.insert({}, function (err, data) {
if (err) {
console.log('Error...insert', err);
}
console.log('Fine!');
});
});
在20分钟左右没有超时或错误apear,并且插入冻结。之后,我得到了"错误...插入"连接丢失错误。
我尝试设置sockettimeoutms = 10000和keepAlive = 1,但是sockettimeoutms在10000后不断上升"超时"事件,并且没有考虑到keepalive设置,甚至不考虑到mongodb的查询。
。也只有在与MongoDB服务器连接并具有长期查询时,WTIMEOUT也有效。如果连接丢失,则行不通。
那么,当我失去conneciton时,如何获得事件或错误?或减少20分钟的查询冻结?
如果运行mongoDB服务器进程,请运行此示例。之后,如果停止服务器进程,您将看到显示Error...close
。可以在此处找到" ON"功能的所有可能事件
var MongoClient = require('mongodb').MongoClient;
// Connect to the db
MongoClient.connect('mongodb://localhost:27017/exampleDb', function(err, db) {
if(err) {
return console.dir(err);
}
console.log('We are connected');
// db.close();
db.on('close', function () {
console.log('Error...close');
});
});
查看以下内容:https://thecodebarbarian.com/managing-connections-with-the-mongodb-node-driver.html
最大的问题是,驾驶员会永远缓冲查询,而在连接恢复之前永远不会返回,而不是使它们失败,如果人们不知道这一点,这可能会悬挂您的程序的执行。