ThinkPHP队列简单实现
//打包
public function test()
{
$app_id = $this->app_id;
$queue_list = F('queue_list');
//进队列
if(empty($queue_list)){
$queue_list = array($app_id);
}else{
if(in_array($app_id, $queue_list) == false){
array_push($queue_list,$app_id);
}
}
F('queue_list',$queue_list);
if(S('dabao_status','',3600,'Memcache') == 1){
$this->ajaxReturn('wait','Waiting',302);
exit();
}
if($this->dabao($app_id)){
echo '打包成功';
}
}
public function dabao($app_id)
{
$queue_list = F('queue_list');
if(empty($queue_list)){return true;}
//设定每个打包程序的过期时间
set_time_limit(60);
//防止用户等不及关了浏览器走人
ignore_user_abort(true);
//记录状态
S('dabao_status',1,3600,'Memcache');
//出队列
$first_id = reset($queue_list);
//执行打包
sleep(20);
//exec("xxx.bat");
array_shift($queue_list);
F('queue_list',$queue_list);
S('dabao_status',2,3600,'Memcache');
//如果打出了自己的包,就OK了,剩下的交给别人,不然就一直执行到自己为至
if($first_id == $app_id){
return true;
}else{
if(S('dabao_status','',3600,'Memcache') == 1){
return true;
}else{
return $this->dabao($app_id);
}
}
}
和AJAX结合,当状态为1的时候,需要前端不停请求来询问。