百度BAE Mongodb长连接实现_解决BAE Mongodb连接不上或断开的问题
2015-10-19 11:23:25  By: dwtedx

就最近几天发现博客访问非常慢、因为我有使用mysql和mongodb配合使用的、昨天发现了一个问题、当我使用mongodb的时候网站响应非常慢、但如果是直接mysql的响应就会非常快、然后就提交一下工单、最后百度的技术给我的答复是这样的、如下


尊敬的用户、您好!

另外、我们想跟您说:我们看slowlog里关于mongo的建立mongo connection的时候比较慢、 您是否每个请求都会新开connection并关闭?

如果网站访问量比较大的话、建议您参考如下方式优化代码以节约建立mongo connection的开销、因为我们最近把mongo不活跃时间的保持时间从30秒延长到了1小时、这样的方式可以大大减少开启新connection的次数


<?php

doSomething();//这次getMongoDB()会新建一个连接
sleep(5);
doSomething();//这次getMongoDB()会复用旧的连接
echo "after a long long time"; // 假设过了很久的时间都没有mongo访问 服务器端已将该连接关闭
doSomething();//这次getMongoDB()在尝试复用旧的连接发现已失效然后再新建一个连接


function doSomething() {
    $mongoDB = getMongoDB();
    $mongoCollection = $mongoDB->selectCollection('test');
    $mongoCursor = $mongoCollection->find();
    while($mongoCursor->hasNext()) {
        print_r($mongoCursor->getNext());
    }
}

//如果没有可用的connection将会新建一个
//如果有可用的connection将会尝试直接复用旧的
//但如果旧的因为长期不活跃已被server端关闭的话,会再重新连接
//这样可以减少不断创建新连接的开销
function getMongoDB() {
    $host = 'mongo.duapp.com';
    $port = '8908';
    $dbname = "IlnGRKRfquQNXCgdwTOl";
    $user = "2b7ef0f091df48e3a40a33323f4024c7";
    $pwd = "5d2e19e26a1b41ee8ab2b92eac0ec37e";

    $retry = 3;
    do {
        try {
            $mongoClient = new MongoClient("mongodb://{$user}:{$pwd}@{$host}:{$port}/{$dbname}");
            return $mongoClient->selectDB($dbname);
        } catch (Exception $e) {
            $retry--;
        }
    } while($retry > 0);
}

?>


那么额外之意就是、以后我们在使用BAE的mongodb的时候、就不用再每次都关闭连接了、之前是因为只有30秒、如果不关闭下一次会连接不上的、然而现在、百度BAE最近把mongo不活跃时间的保持时间从30秒延长到了1小时、这样的方式可以大大减少开启新connection的次数

用这种方式改了之后、发现程序的响应速度是有所提升的、就算一个小时过去了、连接被关闭、那么慢也只会慢一次、其实已经实现了一个短暂的长连接、希望我的分享会对大家有帮助


好了、这样就可以实现在应用里面选择联系人并发送短信了、切记要添加权限不然会出错的

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

DD记账
top
+