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的时候,需要前端不停请求来询问。