php异步调用测试
访问的脚本
/**
* 需求场景 ajax请求之后 需要及时先把结果返回 然后后天自己慢慢处理数据
* 比如:转盘抽奖,点击之后需要ajax请求并及时返回是否中奖的结果。
* 而如果在同一个函数或脚本执行的时候正常是等所有程序执行完成之后才会返回结果
* 而使用curl来触发后续数据处理程序 可以达到异步处理的效果,其实和linux的定时任务类似也是触发脚本运行
* 设置curl超时时间为1秒 这样就不会等待处理结果了
*/
function asyn($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
echo "异步调用完成时间:".date("Y-m-d H:i:s", time());
}
asyn('http://localhost/asyn2.php');//异步调用
var_dump('一等奖');//即时返回算出的奖项 以便前台页面处理转盘 指向
异步处理脚本
<?php
function asyn2()
{
ignore_user_abort(true); // 忽略客户端断开
set_time_limit(0); // 设置执行不超时关闭脚本运行时间(或设置需要的时长) 避免超时
sleep(60);//模拟数据处理时长 或根据业务需要延时
$a=file_put_contents('1.txt','异步处理完成时间为:'.date("Y-m-d H:i:s", time()));
//存数据库等操作 或者发送其他通知之类的
var_dump($a);
}
asyn2();
演示效果一直接浏览器访问(点击图片放大)
演示效果二ajax请求(点击图片放大)