バックグラウンドで非常に長いプロセスを実行する必要があります。プログラムはリクエストの詳細をサーバーに送信し、サーバーはプロセス ID を返します。特定の間隔で、プログラムはそのプロセスが完了したかどうかを確認するために、その ID を持つチェック要求を送信することになっています。接続を閉じることができず、プロセスが完了するまでクライアントが ID を受信できないという事実を除いて、すべて正常に動作します。この記事を使用してみました: http://codehackit.blogspot.com/2011/07/how-to-kill-http-connection-and.htmlそれでも接続を閉じません。これが私がこれまでに行ったことです:
$id = time();
$this->Session->write(sprintf('LongProcess.%s.finished', $id), false);
$this->Response->data(array('process_id' => $id));
ob_end_clean();
ob_start();
$this->Response->render();
header("Connection: close");
ob_end_flush();
ob_flush();
flush();
ignore_user_abort(true);
set_time_limit(0);
// Do really long processing here
説明を助けるために、$this->Response
ajax 呼び出しを処理するために私が書いたコンポーネントがあります。このdata()
メソッドは、コンポーネント内の配列にデータを追加します。このrender()
メソッドは、クライアントが使用する特定の仕様に合わせてすべてのデータを取得およびフォーマットし、 を使用して出力をレンダリングします$this->controller->render('/Elements/response');
。
クライアントが他のことを続けられるように、接続を強制的に閉じるにはどうすればよいですか?