关于Mysql心跳【webman】

czf
/**
 * 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配置的心跳。其他库的心跳是没有维持?

2938 4 0
4个回答

admin

我用的是 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 ');
});

在这里

截图

  • czf 2021-08-07

    这个我知道,假设我database.php连接了2个mysql的库,是不是需要在心跳那里维持2个连接。

  • admin 2021-08-07

    @7932:是的,不然就会 mysql has gone away

钢丝擦

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

  • 开赛灵 2021-08-21

    没啥必要吧。。

  • 钢丝擦 2021-08-23

    @8211:对的,对个人需要而言,你也可以做心跳,长链接效率高,也可以自己手动释放,也可以不做心跳,强制重连,不过路由二级以上很有必要

admin

上传下,分享下吧,

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

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

    可以啊,等我多测试几回看看有没有其它问题

  • admin 2021-08-11

    @8192:3天过去了,请回复下,有没有问题,这是 tp作者 流年亲自回复我的方法

  • 钢丝擦 2021-08-12

    @8189:我测试了没有问题啊,不过不是用你的方法

钢丝擦

已经上传

  • admin 2021-08-11

    我靠,最后修改00:36,这么肝吗

  • 钢丝擦 2021-08-12

    @8189:@8189:(ง •_•)ง哈哈,你有没有发现有问题呢?

年代过于久远,无法发表回答
🔝