安卓php服务器长连接超时,PHP守护进程长时间连接MariaDB导致程序自动退出

先前写了几个PHP的守护进程,其中一个用于实时往MariaDB数据库写数据,一开始运行的都还可以,但是渐渐地就发现,与MariaDB交互的PHP守护进程,经常自己挂掉,尤其是用户量少的时候(很神奇),每隔一天就得重新手动运行。

PHP守护进程逻辑代码如下:<?php

while(1) {

$data = 从缓存队列中获取数据

if( $data !== false ) {

数据库相关操作

} else {

sleep(5);

}

}

排除了PHP代码逻辑错误,或许就是PHP连接Mysql超时之类的异常了。

网上查询了关于php长时间连接mysql的资料,了解到mysql连接默认配置的超时时间为8小时,最大值也只能设置为一年。

mysql手册中也提到了变量wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。

查看当前mysql数据库连接超时wait_timeout值的方式如下:

1)先登录mysql数据库mysql -uroot -p

Enter password: (输入密码)

2)再执行查询命令show global variables like 'wait_timeout';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| wait_timeout  | 28800 |

+---------------+-------+

1 row in set (0.00 sec)

单位为秒,28800秒=8小时。

其实默认设置的8小时已经足够了,想要保持永久连接与mysql的连接,只要在连接超时前,跟Mysql交互一下即可。你可以简单的想象一下,假设电脑桌面的锁屏时间为15分钟,15分钟内只要你动一动鼠标,系统就重新倒计时,防止锁屏的发生。

了解了原理就好办了,我们只要在mysql连接超时前,想办法动一动mysql的“鼠标”。这里,我用到了PHP自带的函数:mysql_ping()。

修改之后的代码如下:<?php

$i = 0;

while(1) {

$data = 从缓存队列中获取数据

if( $data !== false ) {

数据库相关操作

} else {

if( $i >= 1000 ) {

$i = 0;

mysql_ping();

} else {

++$i;

}

sleep(5);

}

}

这样就避免了PHP守护进程长时间连接MariaDB数据库,连接超时导致的程序崩溃。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值