您的位置 首页 php

PHP并行请求接口

//并行调用接口

function multiRequest($url, $data, $timeout = 30) {
	$chArr = [];
	//创建多个cURL资源
	 foreach  ($data as $k => $value) {
		$i = $k;
		$chArr[$i] = curl_init();
		curl_setopt($chArr[$i], CURLOPT_URL, $url);
		//数组转为json串
		$value = json_encode($value);
		//post请求
		curl_setopt($chArr[$i], CURLOPT_CUSTOMREQUEST, "POST");
		curl_setopt($chArr[$i], CURLOPT_POSTFIELDS, $value);
		curl_setopt($chArr[$i], CURLOPT_RETURNTRANSFER, 1);
		//只需要设置一个秒的数量就可以
		curl_setopt($chArr[$i], CURLOPT_TIMEOUT, $timeout);
		//设置请求头
		curl_setopt($chArr[$i], CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' .  strlen ($value)));
	}
	//创建批处理cURL 句柄 
	$mh = curl_multi_init(); 
	//增加句柄
	forea ch  ($chArr as $k => $ch) {
		curl_multi_add_ handle ($mh, $ch); 
	}
	$active = null;
	 do  {
		while (($mrc = curl_multi_exec($mh, $active)) == CURLM_CALL_MULTI_PERFORM);
		if ($mrc != CURLM_OK) {
			 break ;
		}
		while ($ done  = curl_multi_info_read($mh)) {
			$info = curl_getinfo($done['handle']);
			$error = curl_error($done['handle']);
			$tmp = curl_multi_getcontent($done['handle']);
			$result[] = $tmp;
			curl_multi_remove_handle($mh, $done['handle']);
			curl_close($done['handle']);
		}
		if ($active > 0) {
			curl_multi_select($mh);
		}
	} while ($active);
	return $result;
}
 

文章来源:智云一二三科技

文章标题:PHP并行请求接口

文章地址:https://www.zhihuclub.com/149524.shtml

关于作者: 智云科技

热门文章

网站地图