PHP 伪异步实现 通过 CURL 实现 PHP 异步

介绍一种PHP通过curl实现异步处理的方式,目前应用在我的项目中,使用之前需要安装php_curl扩展

因为curl请求的接口是同一个项目里面的,所以用这种方式比较方便,

  1. curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    将curl超时时间设置为1s介绍一种PHP通过curl实现异步处理的方式,目前应用在我的项目中,使用之前需要安装php_curl扩展

因为curl请求的接口是同一个项目里面的,所以用这种方式比较方便,

curl_setopt($ch, CURLOPT_TIMEOUT, 1);

将curl超时时间设置为1s
public function asynch($data)
    {
        $url = '';//接受curl请求的地址

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type:application/json; charset=utf-8"));

        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));//post方式数据为json格式
        curl_setopt($ch, CURLOPT_TIMEOUT, 1);//设置超时时间为1s

        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }

ignore_user_abort(true);

在接受请求的方法最前面加上ignore_user_abort(true);表示忽略与用户的断开,继续向下执行,不然过了1s超时时间会停止执行的

        ignore_user_abort(true);
        set_time_limit(0);
        $data = file_get_contents("php://input");//接收json数据

业务场景概述:

  1. 在开发微信公众号的时候,因为要接收用户发来的指令,执行一部分业务逻辑然后返回结果给用户,如果同步的方式,由于处理时间不确定且微信服务器在5s之内没有接收到响应,就会提示异常,所以想到利用微信公众平台的客服消息接口,异步通知客户处理结果

  2. 在订单的自动退款中,直接请求第三方接口,因需等待响应结果做后续操作,比如修改退款状态等等

总结:

切勿在控制器中直接请求第三方接口,如需要请求第三方数据,因使用队列, 异步的方式去请求第三方数据

留下你的脚步
推荐阅读