Был создан чат на websocket в Yii2, но после простоя чат вырубается. В логах видим «MySQL has gone».
Решение в оберке сообщение в эксепшен для проверки активности сервера и в случае когда он «has gone» перезапускать.
В MySQL желательно добавить директивы в файле /etc/mysql/my.cnf, в блоке mysqld: (значения указываются в секундах)
[mysqld] wait_timeout = 28800 interactive_timeout = 28800
Код для переподключения с эксепшеном
try { // connect, send, receive messages } catch (\yii\db\Exception $e) { if (/* $e indicates DB connection is closed by timeout */) { $this->db->close(); $this->db->open(); return $this->executeInternal(); } throw $e; }
Источники: https://ixnfo.com/izmenenie-wait_timeout-i-interactive_timeout-v-mysql.html