thinkphp 5+workermanエラー問題

1571 ワード

thinkphp 5.0.Xバージョンは、thinkphp 5で長時間workermanサービスを開始するとエラーが発生します.バージョン0.24は修正されました.なぜなら、長い間データベースにリンクしていたため、データベースが断線したからです.
解決策:
1、データベース構成databaseを変更する.phpファイル、break_reconnectパラメータをtrueに設定します.断線再接続
//         
'break_reconnect' => true,

2、修正/library/think/db/connection.phpのisBreak関数は、以下の最新のisBreak関数に置き換えられます.
    /**
     *     
     * @access protected
     * @param \PDOException|\Exception  $e     
     * @return bool
     */
    protected function isBreak($e)
    {
        if (!$this->config['break_reconnect']) {
            return false;
        }

        $info = [
            'server has gone away',
            'no connection to the server',
            'Lost connection',
            'is dead or not enabled',
            'Error while sending',
            'decryption failed or bad record mac',
            'server closed the connection unexpectedly',
            'SSL connection has been closed unexpectedly',
            'Error writing data to the connection',
            'Resource deadlock avoided',
            'failed with errno',
        ];

        $error = $e->getMessage();

        foreach ($info as $msg) {
            if (false !== stripos($error, $msg)) {
                return true;
            }
        }
        return false;
    }

3、/library/think/db/connector/Mysql.phpのisBreak関数を削除またはコメントします.
変更が完了すると、workermanは長い間データベースにリンクし、データベースは会議を中断して再接続されます.