百度BAE Mongodb长连接实现_解决BAE Mongodb连接不上或断开的问题
程序员文章站
2021-12-28 21:38:45
...
就最近几天发现博客访问非常慢、因为我有使用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的次数
用这种方式改了之后、发现程序的响应速度是有所提升的、就算一个小时过去了、连接被关闭、那么慢也只会慢一次、其实已经实现了一个短暂的长连接、希望我的分享会对大家有帮助
好了、这样就可以实现在应用里面选择联系人并发送短信了、切记要添加权限不然会出错的