使用 curl_multi_init 可并发执行多个 cURL 请求,提升效率。步骤包括:初始化单个 cURL 句柄并设置参数,创建多句柄,添加单个句柄至多句柄,执行并发请求并轮询状态,获取结果,关闭资源。示例中同时请求两个 API,合并 JSON 数据。关键点:curl_multi_exec 需循环调用,配合 curl_multi_select 避免 CPU 空转;用 curl_multi_getcontent 获取响应;及时释放资源防泄漏;可捕获错误信息;建议封装函数或类以支持动态配置;高阶场景可用 Swoole 或 ReactPHP。纯 PHP + curl_multi 适合轻量级并发需求。
PHP 中处理异步 cURL 请求主要依赖 curl_multi_init 相关函数,它允许你并发执行多个 cURL 请求,而不是逐个等待。这对于需要同时请求多个 API 或远程资源的场景非常有用,比如聚合数据、批量检测状态等。
curl_multi_init 可以创建一个多句柄,然后将多个 cURL 句柄(每个对应一个请求)加入其中,并通过循环等待所有请求完成。相比串行执行,这种方式显著提升效率。
基本步骤如下:
以下是一个实用示例,同时请求两个 API 并合并返回的 JSON 数据:
\$urls = [
'https://jsonplaceholder.typicode.com/posts/1',
'https://jsonplaceholder.typicode.com/posts/2'
];
// 初始化多句柄
\$multi = curl_multi_init();
\$handles = [];
// 创建并配置每个 cURL 句柄
foreach (\$urls as \$i => \$url) {
\$ch = curl_init();
curl_setopt(\$ch, CURLOPT_URL, \$url);
curl_setopt(\$ch, CUR
LOPT_RETURNTRANSFER, true);
curl_setopt(\$ch, CURLOPT_TIMEOUT, 10);
// 加入多句柄
curl_multi_add_handle(\$multi, \$ch);
\$handles[\$i] = \$ch;
}
// 执行并发请求
\$running = 0;
do {
curl_multi_exec(\$multi, \$running);
curl_multi_select(\$multi); // 阻塞等待活动连接
} while (\$running > 0);
// 收集结果
\$results = [];
foreach (\$handles as \$i => \$ch) {
\$response = curl_multi_getcontent(\$ch);
\$results[\$i] = json_decode(\$response, true);
curl_multi_remove_handle(\$multi, \$ch);
curl_close(\$ch);
}
// 关闭多句柄
curl_multi_close(\$multi);
// 合并结果
\$merged = array_merge(...array_values(\$results));
print_r(\$merged);
curl_multi_exec 是非阻塞的,所以需要用循环不断调用直到所有请求完成。搭配 curl_multi_select 可以避免 CPU 空转。
curl_multi_getcontent 用于从句柄中提取响应体,必须在请求完成后调用。
注意及时调用 curl_multi_remove_handle 和 curl_close,防止资源泄漏。
如果某个请求失败(如超时或 DNS 错误),可以通过 curl_error 或 curl_errno 捕获具体信息。
在高并发场景下,可以封装成函数或类,支持动态传入 URL 列表、自定义选项、超时控制和错误处理策略。
对于更复杂的异步需求(如回调、协程),可考虑使用 Swoole 或 ReactPHP,但纯 PHP + curl_multi 已能满足大多数轻量级并发请求场景。
基本上就这些。掌握 curl_multi 就能在不依赖扩展的情况下实现高效的并发 HTTP 请求处理。
# php
# react
# js
# json
# curl
# dns
# 并发请求
# swoole
# 封装
相关文章:
制作电商网页,电商供应链怎么做?
建站之星后台密码遗忘如何找回?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
如何在新浪SAE免费搭建个人博客?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何在自有机房高效搭建专业网站?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
重庆市网站制作公司,重庆招聘网站哪个好?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何在Windows环境下新建FTP站点并设置权限?
php json中文编码为null的解决办法
建站之星CMS五站合一模板配置与SEO优化指南
微信推文制作网站有哪些,怎么做微信推文,急?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
如何在万网自助建站中设置域名及备案?
威客平台建站流程解析:高效搭建教程与设计优化方案
如何选择网络建站服务器?高效建站必看指南
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
常州自助建站工具推荐:低成本搭建与模板选择技巧
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
建站之星微信建站一键生成小程序+多端营销系统
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
定制建站价位费用解析与套餐推荐全攻略
在线制作视频网站免费,都有哪些好的动漫网站?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何用花生壳三步快速搭建专属网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何在IIS中新建站点并配置端口与物理路径?
如何实现建站之星域名转发设置?
如何用狗爹虚拟主机快速搭建网站?
孙琪峥织梦建站教程如何优化数据库安全?
建站之星安装提示数据库无法连接如何解决?
长沙企业网站制作哪家好,长沙水业集团官方网站?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
西安大型网站制作公司,西安招聘网站最好的是哪个?
网站制作壁纸教程视频,电脑壁纸网站?
,制作一个手机app网站要多少钱?
网站网页制作专业公司,怎样制作自己的网页?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
如何高效完成自助建站业务培训?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
建站主机如何选?高性价比方案全解析
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
制作公司内部网站有哪些,内网如何建网站?
如何在搬瓦工VPS快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。