我正在使用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上。我创建了一个存储库。复制的代码被粘贴到由代码连接的终端中。当我激活设备时,它会给我一个错误。错误是找不到存储库(存储库名称与我要连接的存储库的名称完全不同)