最近一直想要找一些PHP并行的rpc框架或者扩展,看了yar,看的过程中,发现其实php自带curl扩展也是可以做到并行处理的,只不过平时我们不习惯这样用,其实,如果我们的接口比较多,但是这些接口又相互独立,可以使用这样的方式,这样会大大缩短整个页面的运行时间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
$url=array(); $url[] = 'http://www.521php.com/2.php'; $url[] = 'http://www.521php.com/2.php'; $url[] = 'http://www.521php.com/2.php'; $url[] = 'http://www.521php.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); |
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/1993/
2016年10月22日 下午 4:11 跨境电商平台 | 引用 | #1
默默的收藏并且要仔细拜读!