PHP重连示例

最近更新时间:2019-04-16 10:22:38

说明

腾讯云 MongoDB 数据库服务提供的不是简单的 mongod 访问,给到用户访问的是一个负载均衡 IP,此 IP 后面是连接到一系列类似 mongos 一样存在的路由接入层。
客户端驱动会透过负载均衡 IP 与接入机建立一个长连接,当此连接处于长期间活跃状态时,我们不会对其做任何干预,但是当长连接闲置时间超过 1 天时(此时间会随着版本优化而调整),路由接入层会踢掉该连接。
一般来说,客户端驱动会实现一个自动重连的过程,但是也有部分语言的驱动并没有实现。对于没有实现自动重连的语言驱动,当用户使用一个已经被踢掉的连接来尝试与腾讯云 MongoDB 服务通信时可能会得到 “Remote server has closed the connection” 之类的错误信息。所以得手动进行重连,这里给出一个 PHP 重连的 demo。

基于 php mongo 驱动的重连实现

<?php

function getConnection() {
    $connection = false;
    $uri = 'mongodb://rwuser:1234567a@10.66.148.142:27017/admin?authMechanism=MONGODB-CR';
    $maxRetries = 5;
    for( $counts = 1; $counts <= $maxRetries; $counts++ ) {
        try {
            $connection = new MongoClient($uri);
        } catch( Exception $e ) {
     // 或者 根据需要使用下面的catch代码行,注意那一个“\”,某些框架使用命名空间时需要用到。
     // } catch( \Exception $e ) {
            continue;
        }
        break;
    }
    return $connection;
}

$connection = getConnection();

if($connection) {
        $db = $connection->testdb;
        $collection = $db->testcollection;

        $one = $collection->findOne();

        var_dump($one);
}