介绍一种PHP通过curl
实现异步
处理的方式,目前应用在我的项目中,使用之前需要安装php_curl
扩展
因为curl请求的接口是同一个项目里面的,所以用这种方式比较方便,
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数据
业务场景概述:
-
在开发微信公众号的时候,因为要接收用户发来的指令,执行一部分业务逻辑然后返回结果给用户,如果同步的方式,由于处理时间不确定且微信服务器在5s之内没有接收到响应,就会提示异常,所以想到利用微信公众平台的客服消息接口,异步通知客户处理结果
-
在订单的自动退款中,直接请求第三方接口,因需等待响应结果做后续操作,比如修改退款状态等等
总结:
切勿在控制器中直接请求第三方接口,如需要请求第三方数据,因使用队列, 异步的方式去请求第三方数据