当前位置 > 主页 > 万和大讲堂 >


南京RHCE认证培训 3种方法实现PHP多线程异步请求

2016-03-24 11:02

  在网上看过很多版本的PHP异步请求方法,这里简单总结几个常用方法分享给大家

 

  1、用CURL实现一步请求

 

  CURL扩展是我们在开发过程中最常用的一种方法,他是一个强大的HTTP命令行工具,可以模拟POST/GET等HTTP请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。南京RHCE认证培训

 

  示例:

 

  [php]

 

  <?php

 

  $cl = curl_init();

 

  $curl_opt = array(CURLOPT_URL, 'http:///demo.php',

 

  CURLOPT_RETURNTRANSFER, 1,

 

  CURLOPT_TIMEOUT, 1,);

 

  curl_setopt_array($cl, $curl_opt);

 

  curl_exec($ch);

 

  curl_close($ch);

 

  ?> 南京RHCE认证培训

 

  由于CUROPT_TIMEOUT属性最小值为1,这就意味着在客户端必须等待1秒,这也是使用CURL方法的缺点 南京RHCE认证培训

 

  2、用popen()函数实现异步请求

 

  语法格式:popen(command,mode)

 

  示例:

 

  [php]

 

  <?php

 

  $file = popen("/bin/ls","r");

 

  //这里是要执行的代码

 

  //…

 

  pclose($file);

 

  ?>

 

  popen()函数直接打开一个指向进程的管道,速度快,即时相应。但是这个函数是单项的,要么读要么写,而且如果并发数较大,则会产生大量进程,给服务器造成负担。南京RHCE认证培训

 

  另外,如同示例中一样,程序结束后一定要用pclose()来关闭。

 

  3、用fscokopen()函数实现异步请求

 

  我们在平时开发邮件发送功能等socket编程时,都会用到这个函数,在使用这个函数之前,我们要在PHP.ini 中开启 allow_url_fopen 选项,另外在变成时,我们还要自己手动拼接出header部分。

 

  示例:

 

  [php]

 

  $fp = fsockopen("/demo.php", 80, $errno, $errstr, 30);

 

  if (!$fp) {

 

  echo "$errstr ($errno)<br />\n";

 

  } else { 南京RHCE认证培训

 

  $out = "GET /index.php  / HTTP/1.1\r\n";

 

  $out .= "Host: \r\n";

 

  $out .= "Connection: Close\r\n\r\n";

 

  fwrite($fp, $out);

 

  /*这里忽略执行结果

 

  *测试时可以打开

 

  while (!feof($fp)) {

 

  echo fgets($fp, 128);

 

  }*/

 

  fclose($fp);

 

  }

 

  PHP本身没有多线程,但是我们可以用其他方式来实现多线程的效果,上面列举的三种方式都有各自的优缺点,大家在使用时可以根据程序的需要择优选择。


最近开班 more>
  • Web前端开发
  • 软件测试
  • 软件测试预科班
  • AI大模型+全栈开发开班
  • 云原生精英班
  • 云网预科班
  • 开发课程基础班第三期
  • 开发课程基础班第二期
  • 开发课程基础班第五期
  • Java全栈
  • CISP
  • HCIP-cloud
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • HCIE-Datacom(HCIA,HCIP基础)
  • HCIP-Datacom(HCIA基础)
  • HCIA-Datacom(0基础)
  • OCP 19C
  • RHCA
  • 6月9日
  • 5月21日
  • 5月14日
  • 6月9日
  • 5月7日
  • 5月26日
  • 5月19日
  • 5月12日
  • 6月3日
  • 6月9日
  • 随时开课
  • 7月12日
  • 5月19日
  • 5月19日
  • 5月7日
  • 5月10日
  • 5月24日
  • 5月24日
  • 随时开课
  • 随时开课
    • 姓 名 :
    • 电 话 :
    • 课 程 :

技术交流群

  • Java大数据交流群560819979加入
  • Python技术交流群595083299加入
  • Oracle技术交流群595119011加入
  • Web前端技术交流群604697610加入
  • Huawei技术交流群482919361加入
  • Redhat技术交流群587875348加入
  • UI设计技术交流群511649801加入
  • Cisco技术交流群596886705加入
  • IT运维技术交流群605888381加入