You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP cURL处理多API调用,将总响应时间压缩至2秒内

解决方案

PHP 原生并行cURL实现(推荐)

PHP原生提供curl_multi系列函数支持同时发起多个HTTP请求,总耗时等于耗时最长的单个请求(即2秒),完全满足需求,无需额外安装扩展。

<?php
// 配置三个API的请求参数
$apiList = [
    'userdata' => 'first api url',
    'stockavldetails' => 'second api url',
    'stockoutgoingdetails' => 'third api url'
];
$curlHandles = [];
$multiHandle = curl_multi_init();

// 批量初始化cURL句柄并加入多句柄队列
foreach ($apiList as $key => $url) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 3, // 额外设置超时兜底,避免单个接口异常拖慢整体
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'GET',
    ]);
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[$key] = $ch;
}

// 执行并行请求
$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
} while ($status === CURLM_CALL_MULTI_PERFORM || $running);

// 批量获取响应结果
$result = [];
foreach ($curlHandles as $key => $ch) {
    $response = curl_multi_getcontent($ch);
    $result[$key] = json_decode($response, true);
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}
curl_multi_close($multiHandle);

// 最终结果可以直接使用,和原串行逻辑返回结构一致
$data_userdata = $result['userdata'];
$data_stockavldetails = $result['stockavldetails'];
$data_stockoutgoingdetails = $result['stockoutgoingdetails'];
?>

注:该实现同时修复了你原有代码的小错误:原第一个接口的响应变量是$response_userdata,但解码时错用了不存在的$response_menutable。

JavaScript Fetch 并行实现

浏览器端通过Promise.all可以同时发起多个请求,总耗时同样为最长单个请求的耗时,实现更简洁:

// 配置三个接口地址
const apiList = {
  userdata: 'first api url',
  stockavldetails: 'second api url',
  stockoutgoingdetails: 'third api url'
}

// 并行发起请求
Promise.all(
  Object.entries(apiList).map(async ([key, url]) => {
    const res = await fetch(url)
    return [key, await res.json()]
  })
).then(resList => {
  // 转为对象格式直接使用
  const data = Object.fromEntries(resList)
  const data_userdata = data.userdata
  const data_stockavldetails = data.stockavldetails
  const data_stockoutgoingdetails = data.stockoutgoingdetails
  // 后续业务逻辑
})

内容的提问来源于stack exchange,提问作者A. Chithrai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:54:02