【发布时间】:2012-12-08 10:46:51
【问题描述】:
我正在使用 nodejs 和 mongoDB - 我遇到了一些连接问题。
嗯,实际上是“唤醒”问题!它连接得非常好 - 速度超级快,我对结果总体上很满意。
我的问题:如果我有一段时间不使用连接(我说一段时间,因为时间范围变化 5 分钟以上),它似乎会停止。我没有触发断开连接事件 - 它只是挂起。
最终我得到一个响应,例如 Error: failed to connect to [ * .mongolab.com: * ] - ( * = masked values)
应用程序快速重启,连接再次恢复正常。有时,如果我不重新启动应用程序,我可以刷新并重新连接。
这就是为什么我认为这是“唤醒”问题。
代码粗略:
我没有包含代码 - 我认为不需要。它可以工作(除了连接丢失)
注意事项:只有一个“连接”——我从不关闭它。我从不重新打开。
我正在使用猫鼬,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);
});
我在这里尝试了各种配置,比如一直打开和关闭 - 但我相信,普遍的共识是像我一样使用一个打开的包装。 ??
我尝试了一个连接测试器,它会不断检查连接的状态...尽管这似乎表明一切正常 - 问题仍然存在。
我从第一天起就遇到了这个问题。我一直使用 MongoLab 托管 MongoDB。 本地主机上的问题似乎更糟。但我仍然在 Azure 和 nodejit.su 上遇到问题。
因为它无处不在 - 一定是我、MongoDB 或 mongolab。
顺便说一句,我对 php 驱动程序也有类似的经验。 (确认这是在 nodejs 上)
如果有人只是说“这很正常”,那就太好了
提前致谢
罗伯
【问题讨论】:
-
不确定 MongoDB,但在大多数(传统数据库)中,最好按需打开/关闭连接(即每次您需要访问它时)而不是让它永远打开。数据库驱动程序通常经过优化以在后台创建和管理池连接,因此这(打开/关闭)往往非常快。我也很想听听有真正 MongoDB 经验的人对这个问题的看法。
-
谢谢赫克托 - 是的,同意,只有我在调查时看到的所有地方都说按照我的方式去做(除非我理解不正确)
-
我在 MongoHQ 和 MongoLab 实例上都遇到了同样的问题——不仅来自我的 Node 应用程序,还来自 mongo 命令行客户端。 MongoHQ 支持建议我在应用程序或驱动程序级别处理此问题,方法是在发生这种情况时重试。在应用程序级别处理这个问题真是太痛苦了,我很惊讶 mongodb 驱动程序或 mongoose 还没有处理这个问题。
-
有人知道这个吗?我有完全相同的配置和完全相同的问题。本地主机上的情况更糟,但仍然发生在云中。您基本上可以从重新启动中获得一个会话。在这一点上,MongoLab 似乎对我来说几乎无法在 Azure 上使用 :(
-
也有这个问题,但在私人托管解决方案中。似乎与Mongo连接和keepAlive有关。
标签: node.js mongodb azure mongoose mlab