PHP 并发请求 批量请求 Curl
下面代码对多线程并发请求,和单线程请求进行了对比,明显多线程快了不少。
<?phpfunction muti_thread_request($nodes){$mh = curl_multi_init();$curl_array = array();foreach($nodes as $i => $url){$curl_array[$i] = curl_init($url);curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);curl_multi_add_handle($mh, $curl_array[$i]);}$running = NULL;do {usleep(10000);curl_multi_exec($mh,$running);} while($running > 0);$res = array();foreach($nodes as $i => $url){$res[$url] = curl_multi_getcontent($curl_array[$i]);}foreach($nodes as $i => $url){curl_multi_remove_handle($mh, $curl_array[$i]);}curl_multi_close($mh);return $res;}function culrTest($arr){foreach($arr as $url){$ch = curl_init();$ch = curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$result = curl_exec($ch);echo "
";print_r($result);}}$s = microtime(true);$a = array('http://www.baidu.com','http://www.jd.com','https://www.bulgari.cn/','https://bitbucket.org/','http://php.net/','http://php.net/manual/en/function.curl-multi-init.php',);print_r(muti_thread_request($a));//9.36sculrTest($a);//27s$e = microtime(true);echo ($e - $s);