sql >> データベース >  >> RDS >> Mysql

PHPアプリで保留中のAJAXリクエストをキャンセルしますか?

    考えられる因果関係

    1. サーバーはXHRリクエストがキャンセルされたことを認識しないため、対応するPHPプロセスは実行を継続します
    2. これらのPHPプロセスはセッションを使用し、終了するまでこのセッションへの同時アクセスを防ぎます

    考えられる解決策

    上記の2つのポイントのいずれかに対処すると、チェーンが切断され、問題が解決する可能性があります。

    1. (a) ignore_user_abort FALSEです デフォルトですが、非標準の設定を使用している可能性があります。この設定をFALSEに戻します あなたの中でphp.ini または、 ignore_user_abort(false)に電話してください これらの割り込み可能な要求を処理するスクリプトで。

    欠点:スクリプトは終了するだけです。進行中の作業はすべて破棄され、システムがダーティな状態になる可能性があります。

    1. (b)デフォルトでは、PHPは、クライアントに情報を送信しようとするまで、ユーザーが接続を中止したことを検出しません。 echoを実行します 長時間実行されるスクリプトの過程で定期的に何か。

    欠点:このダミーデータは、スクリプトの通常の出力を破損する可能性があります。また、ここでも、スクリプトによってシステムがダーティな状態になる可能性があります。

    1. PHPセッションはファイルとしてサーバーに保存されます。 session_start()について 、スクリプトはセッションファイルを書き込みモードで開き、そのファイルの排他ロックを効果的に取得します。同じセッションを使用する後続のリクエストは、ロックが解除されるまで保留されます。これは、明示的にセッションを閉じない限り、スクリプトが終了したときに発生します。 session_write_close()を呼び出します または session_abort() できるだけ早く。

    欠点:閉じられると、セッションを書き込むことができなくなります(セッションを再開しない限り> 、しかしこれはややエレガントでないハックです)。また、スクリプトは実行を続け、リソースを浪費する可能性があります。

    私は間違いなく最後のオプションをお勧めします。



    1. 任意のテーブルでIDをインクリメントする際に一連の文字列を追加するにはどうすればよいですか?

    2. 使用後にDbCommandを破棄する必要がありますか?

    3. フォークするかしないか?

    4. 2022年にあなたのビジネスを近代化する方法