56 lines
1.0 KiB
PHP
56 lines
1.0 KiB
PHP
<?php
|
||
|
||
namespace app\common;
|
||
|
||
use think\Db;
|
||
|
||
/**
|
||
* 长耗时任务(HTTP 拉摘要、LLM)前后释放/重建 MySQL 连接,避免 Windows errno=10053
|
||
*/
|
||
class DbReconnectHelper
|
||
{
|
||
public static function release()
|
||
{
|
||
try {
|
||
Db::close();
|
||
} catch (\Throwable $e) {
|
||
// ignore
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 确保当前进程可用数据库连接(断线则强制重连)
|
||
*/
|
||
public static function ensure()
|
||
{
|
||
if (self::ping()) {
|
||
return true;
|
||
}
|
||
|
||
self::release();
|
||
|
||
return self::reconnect();
|
||
}
|
||
|
||
private static function ping()
|
||
{
|
||
try {
|
||
Db::query('SELECT 1');
|
||
return true;
|
||
} catch (\Throwable $e) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
private static function reconnect()
|
||
{
|
||
try {
|
||
Db::connect(config('database'), true);
|
||
Db::query('SELECT 1');
|
||
return true;
|
||
} catch (\Throwable $e) {
|
||
return false;
|
||
}
|
||
}
|
||
}
|