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. BeautifulSoup解析非标准HTML的问题

    发现问题: BeautifulSoup版本:4.3.2 在用BeautifulSoup.find_all()搜索HTML时,遇到下面的代码: <a href="/shipin/dong ...

  2. fmt命令

    简单的格式化文本 fmt [option] [file-list] fmt通过将所有非空白行的长度设置为几乎相同,来进行简单的文本格式化 参数 fmt从file-list中读取文件,并将其内容的格式化 ...

  3. Sql语句中IN等方面的用法

    select * from txt1 select * from txt2 select * from txt1 where name in (select name from txt2 where ...

  4. [Java] 类和接口的初始化步骤 - 继承方面

    类和接口在初始化化时,处理继承层级的方法不一样. 类继承的初始化:通过引用 static 字段,触发某个类的初始化,则声明该字段的类,以及该类的父类被初始化. 接口继承的初始化:通过引用 static ...

  5. Java语言与JVM中的Lambda表达式全解

    Lambda表达式是自Java SE 5引入泛型以来最重大的Java语言新特性,本文是2012年度最后一期Java Magazine中的一篇文章,它介绍了Lamdba的设计初衷,应用场景与基本语法. ...

  6. 如何安装Windows 8系统中的telnet组件

    知识点分析:Window 8 系统中Telnet没有默认安装,成为了一个可选组件,“启用或关闭Windows功能”下即可添加此组件. 操作步骤:1.系统桌面下同时按住键盘上 “Windows” 和“X ...

  7. jquery动态添加元素无法触发绑定事件的解决方案。

    jquery动态添加元素无法触发绑定的事件的解决方案. ╭(●`∀´●)╯二狗最近在工作中遇到一个问题,即当用jquery动态添加元素后,发现给动态添加的元素却无法触发事件(╯#-_-)╯╧═╧ ( ...

  8. HTML5 Canvas渐进填充与透明

    详细解释HTML5 Canvas中渐进填充的参数设置与使用,Canvas中透明度的设置与使 用,结合渐进填充与透明度支持,实现图像的Mask效果. 一:渐进填充(Gradient Fill) Canv ...

  9. 更改navigationController push和pop界面切换动画

    For Push: MainView *nextView=[[MainView alloc] init]; [UIView beginAnimations:nil context:NULL]; [UI ...

  10. Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(具体教程)

    原文地址:http://blog.csdn.net/sttyytw/article/details/17005263 声明:本教程在參考了下面博文,并经过自己的摸索后实际操作得出,本教程系本人原创,因 ...