php异步处理

来源:互联网 发布:回收站恢复软件 编辑:程序博客网 时间:2024/05/16 12:20

前两天公司开发微信上传图片时(使用的thinkphp框架),老是出现没有响应的问题,最终经过查错,发现问题出在我们的服务器在抓取上传的图片时会出现超时的现象,而微信服务器在5s左右接收不到响应就会断开链接,所以导致上传图片没有响应,因此,我将图片抓取的处理重新写到了Test分组中的Async控制器中,为AsyncAction.class.php

          class AsyncAction extends Action(){

                 public function saveImg(){

                       set_time_limit(0);

                       ignore_user_abort();//以上两行代码保证微信服务器在断开连接后依然可以继续执行

                        $url=$_GET['url'];//图片路径

                         //图片存储等操作******

                    

                 }

        }

在处理微信响应的程序中则可以这样处理,先定义一个异步处理函数,触发上述类中的操作后即断开

       

   //异步调用后台任务
    private function async($url,$data){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_TIMEOUT,1);//注意:此处设置1s即断开连接
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $res=curl_exec($ch);
        curl_close($ch);
        return $res;
    }

    则在处理微信服务器的回复时可以先:

         $url=***************;//通过微信服务器推送的图片地址 根据自己的业务逻辑可以获取

         $async_url=U('Test/Async/saveImg');

         $this->async($async_url,array('url'=>$url));//异步存储图片 仅有1s的延迟 不会造成下一句无法执行

        $this->response();//回复微信服务器

        

这种方式可以避免因为复杂操作导致超时,但是异步操作以后也将无法返回异步操作的结果

     

0 0
原创粉丝点击