问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

PHP异步处理有哪些方法

发布网友 发布时间:2023-11-07 22:12

我来回答

1个回答

热心网友 时间:2023-11-16 22:44

客户端与服务器端是通过HTTP协议进行连接通讯,客户端发起请求,服务器端接收到请求后执行处理,并返回处理结果。
有时服务器需要执行很耗时的操作,这个操作的结果并不需要返回给客户端。但因为php是同步执行的,所以客户端需要等待服务处理完才可以进行下一步。
因此对于耗时的操作适合异步执行,服务器接收到请求后,处理完客户端需要的数据就返回,再异步在服务器执行耗时的操作。
1.使用Ajax 与 img 标记
原理,服务器返回的html中插入Ajax 代码或 img 标记,img的src为需要执行的程序。
优点:实现简单,服务端无需执行任何调用
缺点:在执行期间,浏览器会一直处于loading状态,因此这种方法并不算真正的异步调用。

$.get("doRequest.php", { name: "fdipzone"} );
<img src="doRequest.php?name=fdipzone">

2.使用popen
使用popen执行命令,语法:

// popen — 打开进程文件指针
resource popen ( string $command , string $mode )
pclose(popen('php /home/fdipzone/doRequest.php &', 'r'));

优点:执行速度快
缺点:

1).只能在本机执行
2).不能传递大量参数
3).访问量高时会创建很多进程
3.使用curl
设置curl的超时时间 CURLOPT_TIMEOUT 为1 (最小为1),因此客户端需要等待1秒

<?php
$ch = curl_init();
$curl_opt = array(
CURLOPT_URL, 'http://www.example.com/doRequest.php'
CURLOPT_RETURNTRANSFER,1,
CURLOPT_TIMEOUT,1
);
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);
?>

4.使用fsockopen
fsockopen是最好的,缺点是需要自己拼接header部分。

<?php

$url = 'http://www.example.com/doRequest.php';
$param = array(
'name'=>'fdipzone',
'gender'=>'male',
'age'=>30
);

doRequest($url, $param);

function doRequest($url, $param=array()){

$urlinfo = parse_url($url);

$host = $urlinfo['host'];
$path = $urlinfo['path'];
$query = isset($param)? http_build_query($param) : '';

$port = 80;
$errno = 0;
$errstr = '';
$timeout = 10;

$fp = fsockopen($host, $port, $errno, $errstr, $timeout);

$out = "POST ".$path." HTTP/1.1\r\n";
$out .= "host:".$host."\r\n";
$out .= "content-length:".strlen($query)."\r\n";
$out .= "content-type:application/x-www-form-urlencoded\r\n";
$out .= "connection:close\r\n\r\n";
$out .= $query;

fputs($fp, $out);
fclose($fp);
}

?>

注意:当执行过程中,客户端连接断开或连接超时,都会有可能造成执行不完整,因此需要加上

ignore_user_abort(true); // 忽略客户端断开
set_time_limit(0); // 设置执行不超时
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
社保到期了还有时效吗 2023年河北退休人员认证时间 社保待遇资格认证有效期怎么认证 ...语法How long does it take you to get to school? 此句中“it... 海信电视初始设置后无信号 设置海信电视恢复出厂设置搜不到电视信号 海信一族电视大锅恢复设置没信号怎么? 如何用c程序读取txt文件? 成都膨胀螺丝型号 云南农信个人如何开通手机银行 请问“耳旁风”的风指的是什么风?15 装修时强弱电箱可以改动吗1 新房装修是不是一定要换强电箱和弱电箱5 0.85×1.4约等于一保留一位小数?2 华为荣耀V20手机怎么截屏 截屏有三种方法6 清明节的习俗50字4311 歌华有线收费1 有没有其他办法解封 解封微信帐号有几种方法 怎么注册第二个? 歌华有线收费标准是北京和内蒙古一样吗? 读家训树家风书信写作文不超过1000字23 为什么手机上优酷能搜索到机顶盒并进行投电视功能,而搜狐视频却...1 揭秘:慈禧太后为何不喜欢同治皇后阿鲁特氏 1.2x1.4约等于多少1 8.43×1.4用。近似数。是多少?3 慈禧太后一生最大的遗憾是什么? 新兰同人小说系列共出版了几本337 网易云音乐上的几首歌名字忘了,都是用王者荣耀里英雄语音做的,... 男老年人导尿前有什么得注意?2 谁知道,广告语音制作软件是哪一个好用57 梦见和同事的老公有关系的预兆 梦见出轨是什么意思?梦见朋友老公出轨 如何注册第二个? 梦见与朋友老公调情的预兆 13. 有真人语音软件吗?就是可以用人声播读文字的软件 求1990年的天若有情 电视剧(郑伊健版) 《士兵突击》中伍六一是怎样接受许三多的?14 大家装修的时候有装弱电箱吗 急求关于教师节的相声台词213 快铁香港太孑站到铜锣湾 2002年1月19日出生的是什么星座8 乐跑晨跑为什么显示自由跑呢 为什么手机上优酷能搜索到机顶盒并进行投电视功能,而搜狐视频却...1 劳力特新风系统有除湿功能吗? 马尾到上渡怎么坐公交车 华为荣耀V20手机怎么截屏 截屏有三种方法4 今天到医院检查,发现血吸虫抗体反应指标igm,igG 一个阴性,一个阳性,请 ... 移动机顶盒怎么安装优酷视频软件4 以“家风”教育为话题写一篇600~1000字的作文 大神来帮...55 房子装修,请问下弱电箱的安装问题。