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

本贴最后更新于 1678 天前,其中的信息可能已经时异事殊

介绍一种 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. 在订单的自动退款中,直接请求第三方接口,因需等待响应结果做后续操作,比如修改退款状态等等

总结:

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

  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    164 引用 • 407 回帖 • 526 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...