首页 > 编程 > PHP > 正文

php使用curl模拟多线程发送请求的代码示例

2020-03-22 19:19:05
字体:
来源:转载
供稿:网友
本篇文章给大家带来的内容是关于php使用curl模拟多线程发送请求的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

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

//设置缓冲为0(也可以去php.ini设置)ini_set( output_buffering , 0);//打开输出缓冲区ob_start();//设置一个空数组$curl_Arr=[];//这里模拟20次请求for($i=0;$i $i++){ //开启curl连接 $curl_Arr[$i]=curl_init( http://XXXX/test.php  //CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE; curl_setopt($curl_Arr[$i],CURLOPT_RETURNTRANSFER,1);//创建批处理cURL句柄$mh = curl_multi_init();foreach($curl_Arr as $k = $ch){ //curl句柄入栈增加 curl_multi_add_handle($mh,$ch);$active = null;while(count($curl_Arr) 0){ //发起curl_multi请求 @curl_multi_exec($mh,$active); foreach($curl_Arr as $k = $ch){ //获取句柄的返回值 if($result[$k]= curl_multi_getcontent($ch)){ //输出结果 echo $result[$k]/n  ob_flush(); //把被释放的数据发送到浏览器 flush(); //关闭该句柄 curl_multi_remove_handle($mh,$ch); unset($curl_Arr[$k]);//关闭ouput_buffering机制ob_end_flush();//关闭 curl_mulit 句柄curl_multi_close($mh);

我再服务器上建立一起请求的html' target='_blank'>php页面命名为test.php,内容如下

1 sleep(10);2 echo seccess exit;

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

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

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

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

以上就是php使用curl模拟多线程发送请求的代码示例的详细内容,PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表