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. 信用卡/借记卡充值p2p平台

    第一部分信用卡/借记卡充值 首先信用卡尽量不要用于网贷,因为这样会有风险,对投资人和借款人都不利,况且银行的钱也不是那么好用的,对吧?但是也有很多朋友问我信用卡相关事宜,我在这里专门做个解答,信用卡用 ...

  2. LinGo:投资问题——线性规划

    一.根据题目所给数据,建立一张表格方便查看 项目A 项目B 项目C 项目D 可投资年 1,2,3,4 3 2 1,2,3,4,5 收回本利年 次年年末 第5年 第5年 当年年末 本利 1.06 1.1 ...

  3. 日积月累:ProguardGui进行jar包代码混淆

    前面文章<Proguard进行源代码混淆>讲解过怎么使用Proguard工具对Android的源代码进行混淆的方法(感兴趣的朋友可以访问:http://blog.csdn.net/p106 ...

  4. Java线程的相关方法

    ~ start()  启动线程方法 ~ run()  调用start()方法时,真正执行的就是该方法的方法体 ~ sleep()  让当前线程睡眠,睡眠到期自动苏醒,并进入可运行状态,而不是运行状态 ...

  5. CXF WebService整合Spring

    转自http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html 首先,CXF和spring整合需要准备如下jar包文件: 这边我是用Spr ...

  6. NYOJ 214 最长上升子序列nlogn

    普通的思路是O(n2)的复杂度,这个题的数据量太大,超时,这时候就得用nlogn的复杂度的算法来做,这个算法的主要思想是只保存有效的序列,即最大递增子序列,然后最后得到数组的长度就是最大子序列.比如序 ...

  7. poj 1964 Cow Cycling(dp)

    /* 一开始想的二维的 只维护第几只牛还有圈数 后来发现每只牛的能量是跟随每个状态的 所以再加一维 f[i][j][k]表示第i只牛 领跑的j全 已经消耗了k体力 转移的话分两类 1.换一只牛领跑 那 ...

  8. 注意在insert插入数据库时的int类型问题

    比如,一个语句,insert into mbProduct(p_UserID,p_BigID,p_qq)values("+getUserid+",'"+getdrpdl+ ...

  9. Eclipse换背景

    http://tieba.baidu.com/p/2128040173 1.打开Eclipse的Help->Eclipse Marketplace 2.在Find里搜索Eclipse Color ...

  10. cos实现文件上传--推荐

    1.导包 2.核心类:MultipartRequest MultipartRequest是request的包装类 参数1:request 参数2:保存路径 参数3:上传文件大小,默认为1M 参数4:编 ...