php----curl_multi实现并发
程序员文章站
2022-05-05 20:42:59
...
curl大家一定使用过,但并发使用的情况估计不多。但在某些情况下确实比较有用,比如在同一请求里面调用多个他方接口,传统方法我们需要串行请求接口:
file_get_contents('http://aa.php');//1秒
file_get_contents('http://bb.php');//2秒
file_get_contents('http://cc.php');//2秒
那在这里耗时为5秒,但curl的muti方法,我们只需2秒就可请求完毕,继续处理后面的逻辑.代码如下:
$nodes = array('http://aa.php','http://bb.php','http://cc.php');
private function multiple_threads_request($nodes){
$curl_arr = array();
$result = array();
// 创建批处理cURL句柄
$master = curl_multi_init();
$active = NULL;//连接数
foreach ($nodes as $i=>$url)
{
// 创建一对cURL资源
$curl_arr[$i] = curl_init($url); //初始化各个子连接
// 设置URL和相应的选项
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
// 增加句柄
curl_multi_add_handle($master, $curl_arr[$i]);
}
//防卡死写法:执行批处理句柄
//这里$active会被改写成当前未处理数
//全部处理成功$active会变成0
do {
curl_multi_exec($master,$active);
} while($active > 0);
foreach($nodes as $i=>$url)
{
//获取输出的文本流
$result[$i] = curl_multi_getcontent ( $curl_arr[$i] );
// 移除curl批处理句柄资源中的某个句柄资源
curl_multi_remove_handle($master, $curl_arr[$i]);
//关闭cURL会话
curl_close($curl_arr[$i]);
}
//关闭cURL会话
curl_multi_close($master);
return $result;
}
上一篇: URL下载网络资源
下一篇: 3.URL下载网络资源