天天看點

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();//資料庫操作
  } 
           

如有問題,歡迎拍磚

注意使用的時候要在循環體内

參數逾時時間可根據實際情況進行傳入