4种PHP异步执行的常用方式


Posted in PHP onDecember 24, 2015

本文为大家讲述了php异步调用方法,分享给大家供大家参考,具体内容如下
客户端与服务器端是通过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);    // 设置执行不超时

以上就是php异步调用方法的详细介绍,希望对大家的学习有所帮助。

PHP 相关文章推荐
PHP 和 HTML
Oct 09 PHP
基于mysql的论坛(2)
Oct 09 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
PHP得到某段时间区间的时间戳 php定时任务
Apr 12 PHP
探讨:如何使用PhpDocumentor生成文档
Jun 25 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
php使用websocket示例详解
Mar 12 PHP
PHP return语句的另一个作用
Jul 30 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 PHP
php实现简单爬虫的开发
Mar 28 PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 PHP
php实现异步数据调用的方法
Dec 24 #PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 #PHP
深入浅析php json 格式控制
Dec 24 #PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 #PHP
盘点PHP和ASP.NET的10大对比!
Dec 24 #PHP
php采用session实现防止页面重复刷新
Dec 24 #PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 #PHP
You might like
有关PHP性能优化的介绍
2013/06/20 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
JS canvas实现画板和签字板功能
2021/02/23 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
python学生管理系统
2019/01/30 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
马来西亚时装购物网站:ZALORA马来西亚
2017/03/14 全球购物
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
Linux文件操作命令都有哪些
2015/02/27 面试题
音乐系毕业生自荐信
2013/10/27 职场文书
关于逃课的检讨书
2014/01/23 职场文书
年度考核自我评价
2014/01/25 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
工程造价专业大学生职业规划范文
2014/03/09 职场文书
小学生安全演讲稿
2014/04/25 职场文书
护理专业求职信
2014/06/15 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
行政撤诉申请书
2015/05/18 职场文书
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS