站三界导航
首页 PHP代码PHP用curl_multi并行获取多个HTTP接口数据

PHP用curl_multi并行获取多个HTTP接口数据

  • PHP代码
  • 来源:站三界导航
  • 62阅读
  • 2022-06-29

最近一直想要找一些PHP并行的rpc框架或者扩展,看了yar,看的过程中,发现其实php自带curl扩展也是可以做到并行处理的,只不过平时我们不习惯这样用,其实,如果我们的接口比较多,但是这些接口又相互独立,可以使用这样的方式,这样会大大缩短整个页面的运行时间。

$url=array();
$url[] = 'http://www.zhansanjie.com/2.php';
$url[] = 'http://www.zhansanjie.com/2.php';
$url[] = 'http://www.zhansanjie.com/2.php';
$url[] = 'http://www.zhansanjie.com/2.php';
$mtime=explode(' ',microtime());
$startTime=$mtime[1]+$mtime[0];
echo $s = $startTime;
echo PHP_EOL;
$mh = curl_multi_init();
foreach($url as $k => $v) {
	$ch[$k] = curl_init($v);
	curl_setopt($ch[$k], CURLOPT_HEADER, 0); //不输出头
	curl_setopt($ch[$k], CURLOPT_RETURNTRANSFER, 1); //exec返回结果而不是输出,用于赋值
	curl_multi_add_handle($mh, $ch[$k]); //决定exec输出顺序
}
$running = null;
do { //执行批处理句柄
	curl_multi_exec($mh, $running); //CURLOPT_RETURNTRANSFER如果为0,这里会直接输出获取到的内容.如果为1,后面可以用curl_multi_getcontent获取内容.
	curl_multi_select($mh); //阻塞直到cURL批处理连接中有活动连接,不加这个会导致CPU负载超过90%.
} while ($running > 0);
foreach($ch as $v) {
	$info[] = curl_getinfo($v);
	$json[] = curl_multi_getcontent($v);
	curl_multi_remove_handle($mh, $v);
}
curl_multi_close($mh);
 
$mtime=explode(' ',microtime());
$startTime=$mtime[1]+$mtime[0];
echo $t = $startTime;
echo PHP_EOL;
echo ($t-$s);
echo PHP_EOL;
var_export($json);
var_export($info);
本文结束
本文来自投稿,不代表站三界导航立场,如若转载,请注明出处:https://www.zhansanjie.com/article/details/8922.html

版权声明:

1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

2、本站仅提供信息发布平台,不承担相关法律责任。

3、若侵犯您的版权或隐私,请联系本站管理员删除。

4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。

分享
站三界导航
本站声明:本站严格遵守国家相关法律规定,非正规网站一概不予收录。本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,站三界导航不承担任何责任。在此特别感谢您对站三界导航的支持与厚爱。