我有一个有两个动作的控制器。一个执行非常长的计算,并在几个步骤中将状态存储在会话容器中:
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";
// ...
}
第二个控制器:
public function shortAction()
{
$session = new Container('SessionContainer');
return new JsonModel(
array(
'status' => $session->status
)
);
}
这些都是通过 AJAX 调用的,但我可以证明仅使用浏览器选项卡的行为相同。我首先调用 /module/long 来完成它的工作。当它完成它的任务时,调用 /module/short (我以为只会回显 JSON)停止 /module/long 就完成了!
提出这一点,一些 ZFers 认为这是对竞争条件的有效保护。但我不能是唯一一个真正不关心后者的用例。
有什么便宜的技巧可以避免使用队列、数据库或内存缓存?试图保持轻量级。