码迷,mamicode.com
首页 > 编程语言 > 详细

php使用curl模拟多线程发送请求

时间:2018-11-03 15:20:36      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:tps   col   div   img   blog   通过   cti   flush   []   

每个PHP文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发比如用php-fpm进程,这里用curl模拟多线程发送请求。php的curl多线程是通过不断调用curl_multi_exec来获取内容,这里举一个demo来模拟一次curl多线程并发操作。

 1 /**
 2  * Subject:php模拟多线程请求curl返回结果
 3  * User: luokakale
 4  * Date: 2018/11/3
 5  * Time: 11:14
 6  */
 7 
 8 //设置缓冲为0(也可以去php.ini设置)
 9 ini_set(‘output_buffering‘, 0);
10 //打开输出缓冲区
11 ob_start();
12 //设置一个空数组
13 $curl_Arr=[];
14 //这里模拟20次请求
15 for($i=0;$i<20;$i++){
16     //开启curl连接
17     $curl_Arr[$i]=curl_init("http://XXXX/test.php");
18     //CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE;
19     curl_setopt($chArr[$i],CURLOPT_RETURNTRANSFER,1);
20 }
21 
22 //创建批处理cURL句柄
23 $mh = curl_multi_init();
24 
25 foreach($curl_Arr as $k => $ch){
26     //curl句柄入栈增加
27     curl_multi_add_handle($mh,$ch);
28 }
29 
30 $active = null;
31 
32 while(count($curl_Arr)>0){
33     //发起curl_multi请求
34     @curl_multi_exec($mh,$active);
35     foreach($curl_Arr as $k => $ch){
36         //启动多线程
37         if($result[$k]= curl_multi_getcontent($ch)){
38             //输出结果
39             echo "$result[$k]\n";
40             ob_flush();
41             //把被释放的数据发送到浏览器
42             flush();
43             //关闭改句柄
44             curl_multi_remove_handle($mh,$ch);
45             unset($curl_Arr[$k]);
46         }
47     }
48 }
49 //关闭ouput_buffering机制
50  ob_end_flush();
51 //关闭"curl_mulit"句柄
52 curl_multi_close($mh);

我再 服务上建立一个php页面,命名为test.php,内容如下:

1 sleep(10);
2 echo ‘seccess‘;exit;

等待十秒后数据下面语句。

然后我在命令行执行改程序结果如下:

技术分享图片

上面代码中通过循环$curl_Arr数组来调用curl_multi_getcontent来查询是否有数据。有数据就输出并删除元素,直到$curl_Arr数组元素个数为0。

该模拟多线程实现是通过使用curl的curl_multi系列函数能实现此功能的。至于该系列函数使用介绍,百度一搜一大把。这里就不做说明了。

 

本文属原创内容,为了尊重他人劳动,转载请注明本文地址:

https://www.cnblogs.com/luokakale/p/9900740.html

php使用curl模拟多线程发送请求

标签:tps   col   div   img   blog   通过   cti   flush   []   

原文地址:https://www.cnblogs.com/luokakale/p/9900740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!