重启后第一次连接上的Mongodb"远程服务器已关闭连接"

Mar*_*tte 7 php mongodb

重新启动mongod服务后,当我尝试连接PHP时,每个数据库都出现连接错误:

Failed to connect to: localhost:27017: Remote server has closed the connection
500 Internal Server Error - MongoConnectionException
Run Code Online (Sandbox Code Playgroud)

在一次或两次刷新后,连接再次起作用.如果在重启后或一段时间后立即建立连接,则不介意.

MongoDB version: 2.6.4
PHP MongoDB driver version: 1.5.5
Configuration: PHP-FPM with Apache2
Run Code Online (Sandbox Code Playgroud)

我认为使用旧的mongo实例的持久连接,但我无法找到如何解决这个问题.当第一个连接失败时,有没有办法强制Mongo驱动程序启动新连接?

Mar*_*tte 21

我们现在使用的解决方案是在重启MongoDB后重启Apache.不是最好的解决方案,但它的工作原理:).


小智 5

有同样的问题.我可以确认它与驱动程序中的连接池有关,但我没有找到任何有价值的选项.我还可以确认,在重新启动数据库几个小时后,第一次新的MongoClient()调用会发生这种情况.

我做的是用try catch包围我的新MongoClient()并重复它.像这样的事情:

try {
    $NoSQLDBMS_Connection = new MongoClient( $NoSQLDBMS_Host );
    $NoSQLDBMS_Database = $NoSQLDBMS_Connection->selectDB( $NoSQLDBMS_DBName );
} catch( Exception $e ) {
    // retry, mostly when mongodb has been restarted in order to get a new connection
    $MaxRetries = 5;
    for( $Counts = 1; $Counts <= $MaxRetries; $Counts ++ ) {
        try {
            $NoSQLDBMS_Connection = new MongoClient( $NoSQLDBMS_Host );
            $NoSQLDBMS_Database = $NoSQLDBMS_Connection->selectDB( $NoSQLDBMS_DBName );
        } catch( Exception $e ) {
            continue;
        }
        return;
    }
    // do something fancy here if mongodb is not reachable at all
}   
Run Code Online (Sandbox Code Playgroud)

重试最多 5次只是偏执狂.我从来没有经历过需要多次重试.

希望能帮助到你.