PHP写了一个websocket服务,mysql连接实例丢失问题怎么解决?

发布于 2022-09-11 23:42:48 字数 956 浏览 26 评论 0

我用ESD框架
他有个mysql插件,插件内获取mysql实例是用连接池的:

    public function mysql($name = "default")
    {
        $db = getContextValue("MysqliDb:$name");
      
        if ($db == null) {
            /** @var MysqlManyPool $mysqlPool */
            $mysqlPool = getDeepContextValueByClassName(MysqlManyPool::class);
            $pool = $mysqlPool->getPool($name);
            if ($pool == null) throw new MysqlException("No MySQL connection pool named {$name} was found");
            return $pool->db();
        } else {
            return $db;
        }
    }

由于程序是常驻内存的,mysql的连接实例也在内存中的,但是因为mysql的连接是会因为超过 wait_timeou 设置而断开的。所以当断开后程序再次使用内存中的msyql实例时。就会报如下错误:

PHP Warning: mysqli::prepare(): MySQL server has gone away in /data/wwwroot/xunim/vendor/esd/mysql-plugin/src/Mysql/Mysqli.php on line 39

请问各位大神,你们有什么好办法解决?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

月下伊人醉 2022-09-18 23:42:48

框架应该提供类似 2006,2013 错误时自动重连并重新执行的功能
如果没有提供就只有自己写 try catch 判断并处理,参考:
https://github.com/tsingsun/y...

疾风者 2022-09-18 23:42:48

定时的向数据库执行一条语句

傲娇萝莉攻 2022-09-18 23:42:48

报gone away的时候尝试重连

瑾夏年华 2022-09-18 23:42:48

调整timewait的超时时间吧。简单点

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文