我有一个PHP套接字服务器,它坐在那里等待连接,然后与数据库对话以解决它们。当我测试时,它工作得很好,但当我把它放在那里时,第二天早上它就不再与数据库对话了。
当我查看日志时,我看到的是:
200327 11:54:37 24 Connect dbuser@localhost as anonymous on dbname
24 Quit
我期待看到更多这样的东西:
200327 11:54:20 23 Connect dbuser@localhost as anonymous on dbname
23 Query SELECT * FROM table1 WHERE num=4
23 Query SELECT * FROM table2 WHERE num='4' AND info='deleted'
23 Query SELECT * FROM table3 WHERE num='4'
23 Quit
但由于某种原因,在服务器运行了一段时间后,在最初的连接之后,查询永远不会通过。
我唯一能想到的是,也许我的PDO对象在某种程度上超时了,因为我在启动服务器时创建了它一次。
$dbh = new PDO($dbName,$dbUser,$dbPass);
对可能发生的事情有什么想法吗?如果在流程开始时创建PDO对象不正确,如何更好地管理该资源?
PHP是PHP 7.0.33,MySQL是10.1.44-MariaDB-0+deb9u1 Debian 9.11。
Mysql服务器将在"wait_timout"秒后关闭非活动连接。变量描述如下:https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout
我建议每次请求到达套接字时都在客户端(php(打开新的连接,并在作业完成后关闭,因为增加wait_timeout可能会导致太多挂起的连接(除非php服务器永远不会停机并重复使用相同的数据库连接(