PHP Сокет-сервер теряет связь с MySQL Ночью - PullRequest
0 голосов
/ 27 марта 2020

У меня есть сокетный сервер 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  

Но по какой-то причине, после того как сервер некоторое время работал, запросы после этого не проходят go. начальное соединение.

Единственное, о чем я могу думать, это то, что, возможно, мой объект PDO как-то истекает, поскольку я создаю его один раз, когда запускаю сервер.

$dbh = new PDO($dbName,$dbUser,$dbPass);

Любые мысли о том, что может происходить, и если создание объекта PDO в начале процесса не является правильным, как лучше управлять этим ресурсом?

PHP - это PHP 7.0.33, MySQL is 10.1.44-MariaDB-0 + deb9u1 Debian 9.11.

1 Ответ

1 голос
/ 27 марта 2020

Mysql сервер закроет неактивное соединение через секунды "wait_timout". Переменная описана здесь: https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout

Я бы предложил открывать новое соединение на стороне клиента (php) каждый раз, когда запрос поступает в сокет и закрывается после выполнения задания, поскольку увеличение wait_timeout может привести к слишком большому количеству зависающих соединений (если php сервер никогда не отключается и не использует одно и то же соединение с БД)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...