不停運作的循環體,如何重連是個傷心的事,好在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();//資料庫操作
}
如有問題,歡迎拍磚
注意使用的時候要在循環體内
參數逾時時間可根據實際情況進行傳入