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. 实Schur分解

        前面已经说过LU,Cholesky和QR分解,这次介绍的是实Schur分解.对这个分解的定义是任意一个矩阵A,可有如下形式的分解:               U*A*U' = B;其中B是拟 ...

  2. js编写验证码

    这是一个简单的js编写的验证码,自己已经亲自验证,没有问题了 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...

  3. Android Studio SDK更新失败解决方法

    1.设置host 首先在windows/system32/drivers/etc/hosts中设置hosts,需要管理员权限.对hosts进行编辑: sudo vim hosts #Google主页 ...

  4. Wii硬盘版玩机心得

    若干年前在电玩巴士买了一台硬盘版的Wii,下面是我的玩机心得: 查看Wii的系统版本信息 链接:http://www.cnblogs.com/duxiuxing/p/4251693.html Wii硬 ...

  5. maven项目中找不到Maven Dependencies解决办法

    用eclipse创建maven项目后,在Deployment Assembly中通过Add...->Java Build Path Entries导入Maven Dependencies时,发现 ...

  6. ubuntu14.04 制作U盘启动文件

    1.制作U盘启动文件 网上搜索:U盘安装Ubuntu 12.10 图文教程(ultraiso) http://www.jb51.net/os/94398.html 2. 重启,按Del(或F2)进BI ...

  7. Kernel 4.9的BBR拥塞控制算法。

    重要的事情说三遍! BBR并不能突破带宽限制!!! BBR并不能突破带宽限制!!! BBR并不能突破带宽限制!!! 它的功能如下: 1.在高丢包率与低速率的网络中提升传输效果,充分利用带宽. 2.降低 ...

  8. Linux 高可用(HA)集群之keepalived详解

    http://freeloda.blog.51cto.com/2033581/1280962 大纲 一.前言 二.Keepalived 详解 三.环境准备 四.LVS+Keepalived 实现高可用 ...

  9. Win32 的dll导入

    dll 文件可以导入变量,函数,和C++类,但是导入变量会使执行程序与dll紧耦合,而C++类导入则需要两个文件的开发商所用的编译器相兼容,所以做好只导入函数; 创建dll : 头文件:#ifdef  ...

  10. Tinyxml 操作XML

    对于xml文件,目前的工作只是集中在配置文件和作为简单的信息文件来用,因此我不太喜欢使用msxml这种重量级的xml解析器,特别是使用msxml解析xml涉及到复杂的com类型转换,更是令人感觉繁琐. ...