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. BZOJ 1023 [SCOI2009]生日快乐

    1024: [SCOI2009]生日快乐 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1729  Solved: 1219[Submit][Statu ...

  2. 【转】BLE开发的各种坑

    原文网址:http://www.race604.com/android-ble-tips/ 这段时间在做低功耗蓝牙(BLE)应用的开发(并不涉及蓝牙协议栈).总体感觉 Android BLE 还是不太 ...

  3. 【模拟】Vijos P1062 迎春舞会之交谊舞

    题目链接: https://vijos.org/p/1062 题目大意: 一群男女站成一排,一男一女配对,女的只找左边第一个空闲的男生,给定前n个女生左边的额男生个数,问前n个女生到男伴之间共有几个男 ...

  4. Intellij IDEA 14隐藏被排除的文件夹

    被排除的文件和文件夹以红色显示了. 看着这东西,人一下子就不好了. 还好设置可以改回来. Project tab右上角齿轮,关闭“Show Excluded Files”即可.

  5. Java 8 表示两个时间点距离

    Java JDK8 的 java.time API 提供全面的 date 和 time 的模型. 下面是一个使用案例:求两个时间点的距离. package com.tony.test; import ...

  6. UITextView ios7

    UITextView *textView2 = [[UITextView alloc]initWithFrame:CGRectMake(, textView1.frame.size.height + ...

  7. Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)

    遇着这个提示的话,如果本地只安装了一个mysql,这里写的很详细的 http://www.blogjava.net/asenyifei/articles/82575.html 看这里可以解决,如果本地 ...

  8. ListView 水平滑动 水平和竖直滑动

    效果 Activity public class MainActivity extends Activity {     @Override     protected void onCreate(B ...

  9. hdu 4772

    题意:给你两个矩阵,一个矩阵旋转90度,180度,270度, 然后和另外一个矩阵进行比较,如果对应值相同,则加一,最后得出最大的值 题目没什么难度....主要是纪念下....貌似这一题是当时比赛前一个 ...

  10. (转)ASP.NET 2.0中的partial

    1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个 不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放 ...