/**
* 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配置的心跳。其他库的心跳是没有维持?
我用的是 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 ');
});
在这里
这个我知道,假设我database.php连接了2个mysql的库,是不是需要在心跳那里维持2个连接。
@7932:是的,不然就会 mysql has gone away
我已经改了底层代码,model层改用了tp-orm,不用做心跳,用完自动释放连接,避免并发大直接拖垮数据库,不用维持大量连接和资源,路由支持二级控制
没啥必要吧。。
@8211:对的,对个人需要而言,你也可以做心跳,长链接效率高,也可以自己手动释放,也可以不做心跳,强制重连,不过路由二级以上很有必要
上传下,分享下吧,
我记得流年以前和我说过,可以这样手动 连接/关闭数据库 句柄,不需要修改tp-orm,手册上没有放上去而已
Db::connect(Config::pull('database'),true);
Db::getConnection()->close();
可以啊,等我多测试几回看看有没有其它问题
@8192:3天过去了,请回复下,有没有问题,这是 tp作者 流年亲自回复我的方法
@8189:我测试了没有问题啊,不过不是用你的方法
已经上传
我靠,最后修改00:36,这么肝吗
@8189:@8189:(ง •_•)ง哈哈,你有没有发现有问题呢?