当前位置: 首页 > 面试题库 >

mongoDB是否存在重新连接问题或我做错了吗?

许鸿志
2023-03-14
问题内容

我正在使用nodejs和mongoDB-并且遇到了一些连接问题。

好吧,实际上是“唤醒”问题!它连接得非常好-速度超快,我通常对结果感到满意。

我的问题: 如果我一段时间不使用连接(我说是因为时间间隔变化5分钟以上),它似乎停滞了。我没有触发断开连接事件-它只是挂起。

最终,我得到一个类似错误的响应:无法连接到[ .mongolab.com:]-(* =屏蔽值)

快速重启应用程序,连接再次恢复正常。有时,如果我不重新启动应用程序,我可以刷新并愉快地重新连接。

这就是为什么我认为这是“唤醒”问题。

代码粗略概述:

我没有包含代码-我认为不需要。它有效(除了连接丢失)

注意事项: 只有一个“连接”-我从不关闭它。我从不重新开放。

我正在用猫鼬,socketio。

/* constants */

var mongoConnect = 'myworkingconnectionstring-includingDBname';


/* includes */

/* settings */

/* Schema */

var db = mongoose.connect(mongoConnect);

    /* Socketio */

io.configure(function (){
    io.set('authorization', function (handshakeData, callback) {

    });
});

io.sockets.on('connection', function (socket) {

});//sockets

io.sockets.on('disconnect', function(socket) {
    console.log('socket disconnection')
});

/* The Routing */

app.post('/login', function(req, res){

});

app.get('/invited', function(req, res){

});

app.get('/', function(req, res){

});

app.get('/logout', function(req, res){

});

app.get('/error', function(req, res){

});

server.listen(port);
console.log('Listening on port '+port);

db.connection.on('error', function(err) {
    console.log("DB connection Error: "+err);
});
db.connection.on('open', function() {
    console.log("DB connected");
});
db.connection.on('close', function(str) {
    console.log("DB disconnected: "+str);
});

我在这里尝试了各种配置,例如一直打开和关闭-我相信,尽管如此,总的共识是像我一样进行一次开放包装。??

我已经尝试了连接测试器,该测试器会不断检查连接状态…即使这似乎表示一切正常,问题仍然会发生。

从第一天开始我就有这个问题。我一直将MongoDB与MongoLab托管在一起。在本地主机上,问题似乎更严重。但是我仍然在Azure和现在的nodejit.su上遇到问题。

随处可见-它一定是我,MongoDB或mongolab。

顺便说一句,我也有与PHP驱动程序类似的经验。(确认这是在nodejs上)

寻求帮助非常有用-即使有人只是说“这很正常”

提前致谢


问题答案:

感谢所有帮助人员-我已经设法在localhost上解决了此问题,并将其部署到了实时服务器上。

这是我现在正在工作的连接代码:

var MONGO = {
    username: "username",
    password: "pa55W0rd!",
    server: '******.mongolab.com',
    port: '*****',
    db: 'dbname',
    connectionString: function(){
        return 'mongodb://'+this.username+':'+this.password+'@'+this.server+':'+this.port+'/'+this.db;
    },
    options: {
        server:{
            auto_reconnect: true,
            socketOptions:{
                connectTimeoutMS:3600000,
                keepAlive:3600000,
                socketTimeoutMS:3600000
            }
        }
    }
};

var db = mongoose.createConnection(MONGO.connectionString(), MONGO.options);

db.on('error', function(err) {
    console.log("DB connection Error: "+err);
});
db.on('open', function() {
    console.log("DB connected");
});
db.on('close', function(str) {
    console.log("DB disconnected: "+str);
});

我认为最大的变化是在“连接”上使用了“
createConnection”-我以前曾经使用过,但是现在选项可能有所帮助。这篇文章对http://journal.michaelahlers.org/2012/12/building-
with-nodejs-
persistence.html很有帮助


如果说老实话,我不太确定为什么要添加这些选项(如@jareed所述),我还发现有些人在“ MaxConnectionIdleTime”方面取得了成功-
但据我所知,javascript驱动程序没有有此选项:这是我尝试复制行为的尝试。

到目前为止一切顺利-希望这对某人有帮助。

更新:2013年4月18日 注意,这是第二个具有不同设置的应用程序

现在我以为我已经解决了这个问题,但是问题又来了,最近又在 另一个应用程序上 使用相同的连接代码,这又让人头疼。困惑!!!

但是设置略有不同……

此新应用程序正在使用IISNode在Windows框上运行。 我最初并不认为这很重要。

我读到Azure上mongo可能存在一些问题(@jareed),因此我将数据库移至AWS-问题仍然存在。

因此,我再次开始使用该选项对象,对其进行了很多阅读。得出以下结论:

options: {
    server:{
        auto_reconnect: true,
        poolSize: 10,
        socketOptions:{
            keepAlive: 1
        }
    },
    db: {
        numberOfRetries: 10,
        retryMiliSeconds: 1000
    }
}

与我声明的原始选项对象相比,这有点受过教育。但是-仍然不好。

现在,由于某种原因,我不得不离开该Windows框(与未在其上编译模块有关)–移动起来要比花上一个星期才能使其正常工作要容易得多。

所以我将我的应用程序移至nodejitsu。 低,请看我的联系还活着! !

所以…。这是什么意思……我不知道!我所知道的是那些选项似乎可以在Nodejitsu上运行……。为了我。

我相信IISNode使用某种“永远”脚本来保持应用程序的生命。为了公平起见,应用程序不会因此崩溃而崩溃,但是我认为必须不断刷新某种“应用程序周期”-这就是它可以进行连续部署的方式(ftp代码,不需要重新启动应用程序)-也许这是一个因素;但我现在只是猜测。

当然,这一切都意味着现在还没有解决。它仍然没有解决。在我的设置中为我解决了。



 类似资料:
  • 问题内容: 当我的MongoDB连接空闲几分钟后,下一个请求将错误结束。从命令行客户端,它看起来像这样: 我看到针对MongoHQ和MongoLab的沙箱实例的问题。 由于重新连接,下一个请求通过正常。这是我的网络应用程序中的一个问题,因为几分钟不活动后,在网络请求期间将出现此错误。有两件事让我感到惊讶: MongoDB连接被如此频繁和频繁地破坏,并且 驱动程序只是引发一个异常,而不是在重新连接后

  • 我试图发布一个新的条目到MongoDB,我知道这个问题是我在服务器文件中调用我的路由的地方,但我不知道如何解决这个问题。我需要能够测试在邮递员的API和张贴到数据库。 我得到以下错误: /users/ryan/desktop/leasequery/operations-backend/node_modules/express/lib/router/index.js:458抛出新的TypeError

  • } 它正在抛出这些错误。

  • 问题是没有捕捉到此异常。尽管MongoDB引发以下异常: com.mongodb.mongosocketOpenException:在com.mongodb.Connection.socketstream.open(socketstream.java:63)在com.mongodb.Connection.internalstreamConnection.open(internalstreamCon

  • 问题内容: 更新: 我在驱动程序上使用2.1版本,而不是3.2 我有一个使用MongoDB的节点应用程序。我的问题是,如果MongoDB服务器由于任何原因而关闭,则应用程序不会重新连接。为了实现这一点,我基于此官方教程中的代码进行了测试。 想法是运行此脚本,然后停止mongod,然后重新启动它。所以,我们开始: 将MongoDb停止10秒钟可以达到预期效果:它将停止运行查询10秒钟,然后在服务器返

  • 我想把这个项目放到github上。我创建了一个存储库。复制的代码被粘贴到由代码连接的终端中。当我激活设备时,它会给我一个错误。错误是找不到存储库(存储库名称与我要连接的存储库的名称完全不同)