关于Mysql心跳【webman】

0
/**
* mysql心跳。定时发送一个查询,防止mysql连接长时间不活跃被mysql服务端断开。
* 默认不开启,如需开启请到 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');
});
}
}

假设我的database.php 上有几个链接,该心跳只是维持作用default配置的心跳。其他库的心跳是没有维持?

已邀请:

adminv

赞同来自:

我用的是 ThinkOrm,


其实你去看 start.php源码,


webman框架默认启动


1:webserver
2:monitor


每一个worker,都会启动一遍bootstrap.php内的注册,


所以 public static function start($worker) 会被执行2次,也就是说有两个定时器会启动,
\Workerman\Timer::add(30, function (){
//我这个是Tp-Orm的查询方式,这里你用什么驱动,就用什么查询,
\think\facade\Db::query('select 1 limit 1 ');
});


在这里


截图

钢丝擦 - 90

赞同来自:

我已经改了底层代码,model层改用了tp-orm,不用做心跳,用完自动释放连接,避免并发大直接拖垮数据库,不用维持大量连接和资源,路由支持二级控制

adminv

赞同来自:

上传下,分享下吧,


我记得流年以前和我说过,可以这样手动 连接/关闭数据库 句柄,不需要修改tp-orm,手册上没有放上去而已
Db::connect(Config::pull('database'),true);
Db::getConnection()->close();


 close()方法 对应执行 this->pdo=null 然后php会自动发送tcp close然后释放句柄

要回复问题请先登录注册