全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

php如何处理异步curl请求_phpcurl_multi_init并发请求与结果合并

使用 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_multi_init 可以创建一个多句柄,然后将多个 cURL 句柄(每个对应一个请求)加入其中,并通过循环等待所有请求完成。相比串行执行,这种方式显著提升效率。

基本步骤如下:

  • 初始化多个单个 cURL 句柄(curl_init)
  • 设置各个请求的参数(URL、超时、头部等)
  • 创建多句柄(curl_multi_init)
  • 将单个句柄加入多句柄(curl_multi_add_handle)
  • 执行并发请求(curl_multi_exec)并轮询状态
  • 获取结果并合并数据
  • 关闭句柄释放资源

示例代码:并发请求并合并结果

以下是一个实用示例,同时请求两个 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, CURLOPT_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_handlecurl_close,防止资源泄漏。

如果某个请求失败(如超时或 DNS 错误),可以通过 curl_errorcurl_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小时内与您取得联系。