私は2つのアクションを持つコントローラーを持っています。1 つは非常に長い計算を実行し、いくつかのステップでセッション コンテナーにステータスを格納します。
public function longAction()
{
$session = new Container('SessionContainer');
$session->finished = 0;
$session->status = "A";
// do something long
$session->status = "B";
// do more long jobs
$session->status = "C";
// ...
}
2 番目のコントローラー:
public function shortAction()
{
$session = new Container('SessionContainer');
return new JsonModel(
array(
'status' => $session->status
)
);
}
これらは両方とも AJAX 経由で呼び出されますが、ブラウザーのタブを使用するだけで同じ動作を示すことができます。私は最初に /module/long を呼び出します。タスクを完了する間、/module/short (JSON をエコーするだけだと思っていました) を呼び出すと、/module/long が停止します。
これを持ち出すと、一部の ZFer は、これが競合状態に対する有効な保護であると感じました。しかし、後者を本当に気にしないこのユースケースを持つ唯一の人ではないはずです。
キュー、データベース、またはメモリ キャッシュに向かうのを避けるための安価なトリックはありますか? 軽量化を図っています。