Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDb在空闲约15分钟后断开连接_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript MongoDb在空闲约15分钟后断开连接

Javascript MongoDb在空闲约15分钟后断开连接,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有一个Node.js应用程序,它在应用程序启动时连接一次(到远程数据库),并在所有操作中使用该连接变量 MongoClient.connect(mongoConnStr, connOpts, function(err, db) { ... } connOpts是: var connOpts = { server: { socketOptions: { autoReconnect: true, keepAliv

我有一个Node.js应用程序,它在应用程序启动时连接一次(到远程数据库),并在所有操作中使用该连接变量

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

var connOpts = {
    server: { 
        socketOptions: {
            autoReconnect: true, 
            keepAlive: 1 
        }
    }
};
因此,它连接良好,但在空闲约15分钟后,根据请求,它会挂起约30秒,然后抛出以下错误:

/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)
/home/me/Desktop/turbo/node_modules/mongodb/lib/utils.js:97
process.nextTick(函数(){throw err;});
^
MongoError:服务器myapp.cloudapp.net:27017套接字已关闭
在空。(/home/me/Desktop/turbo/node_modules/mongodb/node_modules/mongodb core/lib/topologies/server.js:301:47)
在g(events.js:199:16)
在发出时(events.js:110:17)
在空。(/home/me/Desktop/turbo/node_modules/mongodb/node_modules/mongodb core/lib/connection/pool.js:101:12)
在g(events.js:199:16)
在发出时(events.js:110:17)
在插座上。(/home/me/Desktop/turbo/node_modules/mongodb/node_modules/mongodb core/lib/connection/connection.js:139:12)
在Socket.g(events.js:199:16)
在Socket.emit(events.js:107:17)
在TCP.close(net.js:485:12)

我知道定期ping数据库应该可以解决问题,但也许我缺少的一些配置调整可以解决问题?

尝试以下方法:

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

我已经找到了代码。

您的mongodb服务器是否有防火墙或类似nginx的路由器?是的,有一台机器使用nginx进行反向代理,还有另一台托管mongodb的机器有防火墙。实际上,它们都有防火墙