- 108浏览
- 2022-06-01
最近一直想要找一些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);
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。