如何使用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
相关产品推荐
相关产品推荐

