2015-05-31 1 views
0

У меня есть приложение Node.js, которое подключается один раз (к удаленному db) при запуске приложения и использует эту переменную соединения для всех операций.MongoDb отключает соединение после простоя около 15 минут

MongoClient.connect(mongoConnStr, connOpts, function(err, db) { 
    ... 
} 

connOpts является:

var connOpts = { 
    server: { 
     socketOptions: { 
      autoReconnect: true, 
      keepAlive: 1 
     } 
    } 
}; 

Так он соединяет хорошо, но по запросу после простоя в течение ~ 15mins, он висит на ~ 30secs, а затем бросает следующее сообщение об ошибке:

/home/me/Desktop/turbo/node_modules/mongodb/lib/utils.js:97 
    process.nextTick(function() { throw err; }); 
             ^
MongoError: server myapp.cloudapp.net:27017 sockets closed 
    at null.<anonymous> (/home/me/Desktop/turbo/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:301:47) 
    at g (events.js:199:16) 
    at emit (events.js:110:17) 
    at null.<anonymous> (/home/me/Desktop/turbo/node_modules/mongodb/node_modules/mongodb-core/lib/connection/pool.js:101:12) 
    at g (events.js:199:16) 
    at emit (events.js:110:17) 
    at Socket.<anonymous> (/home/me/Desktop/turbo/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:139:12) 
    at Socket.g (events.js:199:16) 
    at Socket.emit (events.js:107:17) 
    at TCP.close (net.js:485:12) 

Я знаю, что периодическое пинирование db должно решить проблему, но, возможно, некоторые настройки конфигурации, которые мне не хватает, сделают это?

+0

Есть ли у вашего сервера mongodb брандмауэр или маршрутизатор, как nginx? – zag2art

+0

Да, есть машина с nginx, выполняющая обратное проксирование, и есть еще одна машина, на которой установлен MongoDb с брандмауэром. – Acute

+0

фактически оба из них имеют брандмауэры – Acute

ответ

0

попробовать что-то вроде этого:

options: { 
     server:{ 
      auto_reconnect: true, 
      socketOptions:{ 
       connectTimeoutMS:3600000, 
       keepAlive:3600000, 
       socketTimeoutMS:3600000 
      } 
     } 
    } 

Я нашел код here.

Смежные вопросы