PHP使用curl_multi实现并发请求的方法示例php技巧

PHP使用curl_multi实现并发请求的方法示例php技巧

内容导读

收集整理的这篇技术教程文章主要介绍了PHP使用curl_multi实现并发请求的方法示例php技巧,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2393字,纯文字阅读大概需要4分钟

内容图文

这篇文章主要介绍了PHP使用curl_multi实现并发请求的方法,结合实例形式分析了php封装curl_multi实现的并发请求相关操作技巧,需要的朋友可以参考下

本文实例讲述了PHP使用curl_multi实现并发请求的方法。分享给大家供大家参考,具体如下:

class CurlMultiUtil {
/**
* 根据url,postData获取curl请求对象,这个比较简单,可以看官方文档
*/
private static function getCurlObject($url,$postData=array(),$header=array()){

$options = array();

$url = trim($url);

$options[CURLOPT_URL] = $url;

$options[CURLOPT_TIMEOUT] = 3;

$options[CURLOPT_RETURNTRANSFER] = true;

foreach($header as $key=>$value){


$options[$key] =$value;

}

if(!empty($postData) && is_array($postData)){


$options[CURLOPT_POST] = true;


$options[CURLOPT_POSTFIELDS] = http_build_query($postData);

}

if(stripos($url,'https') === 0){


$options[CURLOPT_SSL_VERIFYPEER] = false;

}

$ch = curl_init();

curl_setopt_array($ch,$options);

return $ch;
}
/**
 * [request description]
 * @param [type] $chList
 * @return [type]
 */
private static function request($chList){

$downloader = curl_multi_init();

// 将三个待请求对象放入下载器中

foreach ($chList as $ch){


curl_multi_add_handle($downloader,$ch);

}

$res = array();

// 轮询

do {


while (($execrun = curl_multi_exec($downloader, $running)) == CURLM_CALL_MULTI_PERFORM);


if ($execrun != CURLM_OK) {



break;


}


// 一旦有一个请求完成,找出来,处理,因为curl底层是select,所以最大受限于1024


while ($done = curl_multi_info_read($downloader)){



// 从请求中获取信息、内容、错误



// $info = curl_getinfo($done['handle']);



$output = curl_multi_getcontent($done['handle']);



// $error = curl_error($done['handle']);



$res[] = $output;



// 把请求已经完成了得 curl handle 删除



curl_multi_remove_handle($downloader, $done['handle']);


}


// 当没有数据的时候进行堵塞,把 CPU 使用权交出来,避免上面 do 死循环空跑数据导致 CPU 100%


if ($running) {



$rel = curl_multi_select($downloader, 1);



if($rel == -1){




usleep(1000);



}


}


if($running == false){



break;


}

}while(true);

curl_multi_close($downloader);

return $res;
}
/**
 * [get description]
 * @param [type] $urlArr
 * @return [type]
 */
public static function get($urlArr){

$data = array();

if (!empty($urlArr)) {


$chList = array();


foreach ($urlArr as $key => $url) {



$chList[] = self::getCurlObject($url);


}


$data = self::request($chList);

}

return $data;
}}

您可能感兴趣的文章:

PHP性能测试工具xhprof安装与使用方法详解php技巧

PHP实现通过strace定位故障原因的方法php技巧

yii2多图上传组件的使用教程php实例

以上就是PHP使用curl_multi实现并发请求的方法示例php技巧的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的PHP使用curl_multi实现并发请求的方法示例php技巧全部内容,希望文章能够帮你解决PHP使用curl_multi实现并发请求的方法示例php技巧所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com