您当前的位置: 首页 > 网站编程 > PHP教程 > 使用 curl_multi_init 执行并发请求

使用 curl_multi_init 执行并发请求

作者:不详 来源:网络 发布时间: 2013-10-08 15:26 点击:
PHP 语言不像 JavaScript 那样具备异步回调的特性,实现并发也就有些棘手。不过对于服务器之间进行连接和通讯,PHP 良好支持了 libcurl 库,要执行一批并发请求,依靠 curl_multi_init 方法就可以轻松搞定。 通常,一个简单的 CURL 请求是这样被组装和发送的: $ch = c

使用 curl_multi_init 执行并发请求

 PHP 语言不像 JavaScript 那样具备异步回调的特性,实现并发也就有些棘手。不过对于服务器之间进行连接和通讯,PHP 良好支持了 libcurl 库,要执行一批并发请求,依靠 curl_multi_init 方法就可以轻松搞定。 


通常,一个简单的 CURL 请求是这样被组装和发送的: 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
$data = curl_exec($ch); 
curl_close($ch); 
一旦 curl_exec 被执行,我们就可以捕获到 $data 变量,也就是所需要的响应结果。 

换做 curl_multi_exec 同样有效,原生 PHP 允许并行地处理批处理 CURL 句柄。那么如何实现一批并发的 CURL 句柄呢?我们可以通过建立一个 CURL 批处理会话,来控制两个独立的 CURL 句柄。当会话需要执行时,通过 curl_multi_exec 去处理在栈中的一个句柄。封装成一个函数,基本是这样的: 

function curl_multi ($query_arr) { 
$ch = curl_multi_init(); 
$count = count($query_arr); 
$ch_arr = array(); 
for ($i = 0; $i < $count; $i++) { 
$query_string = $query_arr[$i]; 
$ch_arr[$i] = curl_init($query_string); 
curl_setopt($ch_arr[$i], CURLOPT_RETURNTRANSFER, true); 
curl_multi_add_handle($ch, $ch_arr[$i]); 

$running = null; 
do { 
curl_multi_exec($ch, $running); 
} while ($running > 0); 
for ($i = 0; $i < $count; $i++) { 
$results[$i] = curl_multi_getcontent($ch_arr[$i]); 
curl_multi_remove_handle($ch, $ch_arr[$i]); 

curl_multi_close($ch); 
return $results; 
}

最终所返回的数据是一个由单独 CURL 句柄响应组成的结果集数组。和单独请求相比,基本可以节约一半的时间。

分享到:
本文"使用 curl_multi_init 执行并发请求"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4