/**
* mysql心跳。定時(shí)發(fā)送一個(gè)查詢,防止mysql連接長(zhǎng)時(shí)間不活躍被mysql服務(wù)端斷開(kāi)。
* 默認(rèn)不開(kāi)啟,如需開(kāi)啟請(qǐng)到 config/bootstrap.php中添加 support\bootstrap\db\Heartbeat::class,
* @package support\bootstrap\db
*/
class Heartbeat implements Bootstrap
{
/**
* @param \Workerman\Worker $worker
*
* @return void
*/
public static function start($worker)
{
\Workerman\Timer::add(55, function (){
Db::select('select 1 limit 1');
});
}
}
假設(shè)我的database.php 上有幾個(gè)鏈接,該心跳只是維持作用default配置的心跳。其他庫(kù)的心跳是沒(méi)有維持?
我用的是 ThinkOrm,
其實(shí)你去看 start.php源碼,
webman框架默認(rèn)啟動(dòng)
1:webserver
2:monitor
每一個(gè)worker,都會(huì)啟動(dòng)一遍bootstrap.php內(nèi)的注冊(cè),
所以 public static function start($worker) 會(huì)被執(zhí)行2次,也就是說(shuō)有兩個(gè)定時(shí)器會(huì)啟動(dòng),
\Workerman\Timer::add(30, function (){
//我這個(gè)是Tp-Orm的查詢方式,這里你用什么驅(qū)動(dòng),就用什么查詢,
\think\facade\Db::query('select 1 limit 1 ');
});
在這里
上傳下,分享下吧,
我記得流年以前和我說(shuō)過(guò),可以這樣手動(dòng) 連接/關(guān)閉數(shù)據(jù)庫(kù) 句柄,不需要修改tp-orm,手冊(cè)上沒(méi)有放上去而已
Db::connect(Config::pull('database'),true);
Db::getConnection()->close();
close()方法 對(duì)應(yīng)執(zhí)行 this->pdo=null 然后php會(huì)自動(dòng)發(fā)送tcp close然后釋放句柄