CLI模式下使用主动重连解决DB断线问题(TP5.0)

不停运行的循环体,如何重连是个伤心的事,好在TP可以主动重连,可以写一个小插件,几行代码,解决问题

namespace util;
use think\Db;
/**
 * 数据库主动重连
 * @package util;
 * @date 2019-9-16
 * @author andy3513
 */
class ReloadDb {
   
    private static $time = null;
    
    /**
     * 检测或执行主动重连
     * @author andy3513
     * @param int     $timeout 超时时间
     * @param array $config   连接参数
     */
    public static function init($timeout = 7200,$config = []){
        $time = time();
        if(null === self::$time){
            self::$time = $time;
        }
        $exprie = $time - self::$time;
        if($exprie >= $timeout){            
            Db::connect($config, true);
            self::$time = $time;
        }      
    }
}

使用例子:
可以在循环体或者递归内先进行检测重连即可解决问题
例如:

 while(true){
      \util\ReloadDb::init();//执行重连检测
       Db::name("table")->limit(100)->select();//数据库操作
  } 

如有问题,欢迎拍砖
注意使用的时候要在循环体内
参数超时时间可根据实际情况进行传入

你可能感兴趣的:(技术分享)