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'));
 
   优点:执行速度快 www.lefeng123.com
 
   缺点:1.只能在本机执行
 
   2.不能传递大量参数
 
   3.访问量高时会创建很多进程。
 
   3.使用curl
 
   设置curl的超时时间 CURLOPT_TIMEOUT 为1 (最小为1),因此客户端需要等待1秒
 
   <?php
 
   $ch = curl_init();
 
   $curl_opt = array(
 
   CURLOPT_URL, 'http:///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:///index.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); // 忽略客户端断开 www.qcwy123.com
 
   set_time_limit(0); // 设置执行不超时

php异步调用方法实现示例的更多相关文章

  1. jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法

    jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法   在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们 ...

  2. 微信小程序:封装全局的promise异步调用方法

    微信小程序:封装全局的promise异步调用方法 一:封装 function POST(url, params) { let promise = new Promise(function (resol ...

  3. SpringBoot 异步调用方法并接收返回值

    项目中肯定会遇到异步调用其他方法的场景,比如有个计算过程,需要计算很多个指标的值,但是每个指标计算的效率快慢不同,如果采用同步执行的方式,运行这一个过程的时间是计算所有指标的时间之和.比如: 方法A: ...

  4. 浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法(转载)

    在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,这时很有可能是因为你用的是ajax的异步调用async:t ...

  5. php分享十一:PHP实现异步调用方法研究

    浏览器和服务器之间是通过 HTTP 协议进行连接通讯的.这是一种基于请求和响应模型的协议.浏览器通过 URL 向服务器发起请求,Web 服务器接收到请求,执行一段程序,然后做出响应,发送相应的html ...

  6. C#的同步和异步调用方法

    同步和异步大家都明白什么意思,在这里不多介绍了. namespace ConsoleTest { class Program { static void Main(string[] args) { C ...

  7. PHP实现异步调用方法研究

    作者: Laruence 本文地址: http://www.laruence.com/2008/04/14/318.html 转载请注明出处 , ,); curl_setopt_array(, ); ...

  8. java异步调用方法

    一.利用多线程 直接new线程 Thread t = new Thread(){ @Override public void run() { longTimeMethod(); } }; 使用线程池 ...

  9. JS动态调用方法名示例介绍

    先看看JS的一个函数  JavaScript eval() 函数 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数 描 ...

随机推荐

  1. 【HDOJ】1717 小数化分数2

    简单字符串处理. #include <cstdio> #include <cstring> #include <cmath> #include <ctype. ...

  2. POJ 2391 容牛问题

    题目大意:给定一个无向图,点i处有Ai头牛,点i处的牛棚能容纳Bi头牛,求一个最短时间T使得在T时间内所有的牛都能进到某一牛棚里去.(1 <= N <= 200, 1 <= M &l ...

  3. MapReduce Shuffle And Sort

    引言   MapReduce作出保证:进入每个Reducer的数据行都是有序的(根据数据行的键值进行排序).MapReduce将Mapper的输出进行排序并传递给Reducer作为输入的过程称为Shu ...

  4. 微信小程序实例源码大全

    微信小程序实例源码大全下载 微信小应用示例代码(phodal/weapp-quick)源码链接:https://github.com/phodal/weapp-quick 微信小应用地图定位demo( ...

  5. C# 实现文件或目录复制到指定目录

    public void CopyFilesToDirKeepSrcDirName(string srcPath, string destDir) { if (Directory.Exists(srcP ...

  6. HDU_1430——魔板,预处理,康托展开,置换,string类的+操作

    Problem Description 在魔方风靡全球之后不久,Rubik先生发明了它的简化版——魔板.魔板由8个同样大小的方块组成,每个方块颜色均不相同,可用数字1-8分别表示.任一时刻魔板的状态可 ...

  7. N - Marriage Match II - HDU 3081(最大流)

    题目大意:有一些男孩和女孩玩一个游戏,每个女孩都可以挑一个男孩来进行这个游戏(所有人都要参加),女孩只会挑选她喜欢的男孩,并且她们认为她们朋友喜欢的男孩她们也是喜欢的(朋友的男朋友也是我的男朋友??? ...

  8. Sublime Text3 配置markdown插件

    sublime是一个亮骚的文本编辑器,而且是跨三大平台,而markdown是一门标记语法,对于记录真是神器,具体语法百度很多,下面教你在sublime上配置markdown. 这两个神器结合起来简直好 ...

  9. C# Dictionary 字典

    C#中的Dictionary字典类介绍   关键字:C# Dictionary 字典 作者:txw1958原文:http://www.cnblogs.com/txw1958/archive/2012/ ...

  10. IOS--跳转方式两种

    带导航栏的Push跳转: FloatPassViewController *floatpass = [self.storyboard instantiateViewControllerWithIden ...