优秀的编程知识分享平台

网站首页 > 技术文章 正文

PHP并行请求接口(php并行计算)

nanyue 2024-07-30 03:19:15 技术文章 10 ℃

//并行调用接口

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(); 
	//增加句柄
	foreach ($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;
}

Tags:

最近发表
标签列表