ThinkPHP队列简单实现

DATE: 2015-07-28 / VIEWS: 491

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