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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
Zend 输出产生XML解析错误
Mar 03 PHP
php遍历数组的方法分享
Mar 22 PHP
PHP实现微信网页授权开发教程
Jan 19 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
Apr 19 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
laravel5 Eloquent 实现事务方式
Oct 21 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 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
多人战的战术与战略
2020/03/04 星际争霸
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
php实现多城市切换特效
2015/08/09 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
Python getopt模块处理命令行选项实例
2014/05/13 Python
简单介绍python封装的基本知识
2019/08/10 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
python中的unittest框架实例详解
2021/02/05 Python
学校介绍信范文
2014/01/14 职场文书
语文教学感言
2014/02/06 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
委托书样本
2014/04/02 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
毕业设计说明书
2014/05/07 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
普通党员对照检查材料
2014/09/24 职场文书
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python
php实现自动生成验证码的实例讲解
2021/11/17 PHP