服务器用curl异步调用阻塞问题

smoon1989 2016-08-04 06:56:02
我这边有个需求是这样的。
一个用户调用PHP的API来提交结算一个订单,然后服务器延迟1小时进行结算。
用户提交之后,马上给用户返回:您的订单已经开始处理。
所以,我采用了以下解决办法。
比如:
提交结算接口是http://localhost/order.php?order_id=123456;
订单延迟结算程序是http://localhost/delay.php?order_id=123456
那么在order.php中,我这样写:

<?php
$ch = curl_init();
$url = 'http://localhost/order.php?order_id='.$_GET['order_id'];
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_TIMEOUT_MS,100);
curl_exec($ch);
exit("您的订单已经开始处理");

在delay.php中,我这样写:

<?php
set_time_limit(0);
$order_id = $_GET['order_id'];
$min = 60;
sleep(60*$min);
finish_order($order_id);//处理订单

但是运行时发现,当执行delay.php的时候,所有其他接口都被阻塞不能调用了。
有什么解决办法吗?
...全文
362 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayzen1988 2016-08-04
  • 打赏
  • 举报
回复
引入异步队列 再一小时以后再调用http://localhost/delay.php?order_id=123456

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧