前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP使用CURL模拟多线程发送请求

PHP使用CURL模拟多线程发送请求

作者头像
程序猿的栖息地
发布2022-04-29 14:19:35
2.8K0
发布2022-04-29 14:19:35
举报
文章被收录于专栏:程序猿的栖息地

教程分享

TUTORIAL TO SHARE

本文章讲述了php使用curl模拟多线程发送请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。

正文

SHARE THE BODY

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

代码语言:javascript
复制
//设置缓冲为0(也可以去php.ini设置)
ini_set('output_buffering', 0);
//打开输出缓冲区
ob_start();
//设置一个空数组
$curl_Arr=[];
//这里模拟20次请求
for($i=0;$i<20;$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);

我在服务器上建立一起请求的php页面命名为test.php,内容如下

代码语言:javascript
复制
1 sleep(10);
2 echo 'seccess';exit;

表示等待十秒后数据下面语句。 然后我在命令行执行该程序结果如下:

上面代码中通过循环curl_Arr数组来调用curl_multi_getcontent来查询是否有数据。有数据就输出并删除元素,直到curl_Arr数组元素个数为0。该模拟多线程实现是通过使用curl的curl_multi系列函数能实现此功能的。至于该系列函数使用介绍,百度一搜一大把。这里就不做说明了。

以上所述就是给大家介绍的php使用curl模拟多线程发送请求详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿的栖息地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档