長い処理時間を必要とするリクエストを送信するクライアント側があり、クライアントはajaxでリクエストを送信します。サーバーでリクエストが受け入れられると、クライアントは別のページにリダイレクトします。これはfastcgi_finish_requestによって実行されます(私はphp-fpmを実行しています)
LongWork.php:
<?php
fastcgi_finish_request();
sleep(1000); //Simulate long computation time
?>
client.js:
$.ajax({
url: "...",
data: {},
success: function() {
top.location.href="next_page.php"
}
});
ajaxが送信され、コールバックが成功すると、期待どおりにnext_page.phpにリダイレクトされます。
しかし、その後ページが停止し、スリープが終了するまでサービスを受けられません。私の接続は同じphp-fpmプロセスが終了するのを待っているようです
私はphp-fpmでnginxを実行していますが、なぜこれが発生するのですか?
編集:
さらに調査した結果、この動作の原因は、(facebook SDKからの)アクティブなセッションがあることであることがわかりました。LongWork.phpでセッションを破棄すると、次のようになります。
<?php
session_destroy(); // Session was halting the client from accessing another page
fastcgi_finish_request();
sleep(1000); //Simulate long computation time
?>
この解決策について考えていただけますか?
私はとは違うことをすべきですかsession_destroy()
編集:
Lachlan Peaseのコメントに続いて、私session_destroy
はsession_write_close