当前位置: 首页 > news >正文

Laravel 中 Http::get() 默认同步,切勿在循环中直接使用!

Http::get()(即Illuminate\Http\Client\Factory提供的 HTTP 客户端)默认是同步阻塞的,基于 Guzzle + cURL 或 stream wrapper 实现。在循环中直接调用会导致:

  • 串行请求:每个请求必须等前一个完成才发起下一个
  • 总耗时 ≈ ∑(各请求耗时),极易成为性能瓶颈
  • 浪费 CPU 资源:PHP 进程在 I/O 等待期间无法做其他工作

示例(反面教材)

$urls=['https://a.com','https://b.com','https://c.com'];foreach($urlsas$url){$response=Http::get($url);// 阻塞!// 处理响应}

若每个请求耗时 200ms,3 次请求总耗时 ≈ 600ms。


正确做法

✅ 方案 1:使用批量接口(首选)

如果目标服务支持批量查询(如 GraphQL、/batch endpoint),1 次请求解决 N 个问题

✅ 方案 2:改用异步协程(Swoole / ReactPHP)

在 Swoole 环境中,可用协程并发:

useSwoole\Coroutine;useSwoole\Coroutine\Http\Client;Coroutine\run(function()use($urls){$results=[];foreach($urlsas$url){go(function()use($url,&$results){$parsed=parse_url($url);$cli=newClient($parsed['host'],443,true);$cli->get($parsed['path']??'/');$results[$url]=$cli->body;$cli->close();});}// 所有请求并发执行,总耗时 ≈ 最慢单次请求});

注意:Laravel HTTP Client 本身不支持异步,需绕过它直接使用协程 HTTP 客户端。

✅ 方案 3:分片 + 队列(FPM 环境)

在传统 FPM 下,将任务分片交由队列处理:

// 控制器中URLBatchJob::dispatch($urls);// 队列任务中(可并行多个 worker)publicfunctionhandle(){foreach(array_chunk($this->urls,10)as$chunk){// 可在此 chunk 内用多进程或限制并发的同步请求}}
✅ 方案 4:用 Guzzle 的异步(仅限 CLI,且仍非真异步)

Guzzle 支持异步 promises,但 PHP 本身单线程,需手动wait()仍阻塞,仅能稍作优化:

$client=new\GuzzleHttp\Client();$promises=[];foreach($urlsas$url){$promises[$url]=$client->getAsync($url);}$responses=\GuzzleHttp\Promise\unwrap($promises);// 此处才发起并发

仅在 CLI 下有效,FPM 中仍可能超时;且无法与 LaravelHttp客户端直接集成。


总结

  • Http::get()是同步阻塞的,禁止在循环中直接使用
  • 优先考虑批量 API
  • 若需并发,必须脱离 Laravel HTTP Client,使用 Swoole 协程或队列分片。
  • 在 FPM 环境下,队列是安全且可扩展的解法
http://www.jsqmd.com/news/122215/

相关文章:

  • 杰理之通过earphone端按键无法恢复播放的问题处理【篇】
  • AI智能客服机器人哪个品牌好?2025年最新技术趋势与五大实力厂商推荐 - 十大品牌推荐
  • 2025年年终济南家电搬运公司推荐:深度评测报告与关键指标对比分析 - 十大品牌推荐
  • vxe-table 如何给分组表头下方的每一列增加一个筛选框
  • 杰理之mic 数据到PCmic 录音这一音频流无数据解码【篇】
  • LangFlow与Google Docs联动编辑AI生成内容实测
  • 2025年全球市场证明公司TOP5权威推荐榜:基于服务案例与资质覆盖的深度解析 - 十大品牌推荐
  • 10.17
  • 2025创新型文旅业务中台厂商TOP5权威推荐:数字化转型核心引擎 - 工业推荐榜
  • sam9x60 tcp协议栈 小记
  • Open-AutoGLM输入法频繁崩溃?3步精准定位并修复切换异常
  • 2025年靠谱宁波农家乐厨房装修、厨房装修翻新公司排行榜 - myqiye
  • 【Open-AutoGLM输入法异常处理指南】:99%开发者忽略的5大切换故障根源揭秘
  • 揭秘Open-AutoGLM缩放卡顿真相:5个常被忽略的触发条件与解决方案
  • 如何选择靠谱的全球市场证明公司?2025年最新避坑指南及五大权威机构推荐 - 十大品牌推荐
  • 风琴过滤纸生产商哪家好?多维度为你剖析 - mypinpai
  • 揭秘Open-AutoGLM特殊符号输入失败:99%开发者忽略的底层机制
  • 2025年年终济南家电搬运公司推荐:服务排行深度解读与关键指标对比 - 十大品牌推荐
  • Open-AutoGLM输入法切换卡顿问题深度剖析(工程师私藏排错手册)
  • 2025年年终济南家电搬运公司推荐:专业榜单排行与多维度服务对比分析 - 十大品牌推荐
  • 深度学习——神经网络 - 实践
  • LangFlow中的条件分支节点如何配置?逻辑控制进阶教学
  • LangFlow在高校教学中的应用前景:AI课程实验平台搭建
  • 2025年高性价比短视频代运营公司排行榜,专业服务商推荐 - 工业推荐榜
  • 【Open-AutoGLM文本修复终极指南】:5步彻底解决输入重复顽疾
  • Open-AutoGLM输入异常终极解决方案(工程师私藏修复手册)
  • 2025年资深技术顾问推荐:当前最值得关注的五大AI智能客服机器人品牌全景报告 - 十大品牌推荐
  • 2025年机油供应商靠谱推荐,口碑好的汽轮机油机油源头厂家有哪些? - myqiye
  • 2025年年终成都管道疏通推荐:专业排行解析与多维度服务对比评测 - 十大品牌推荐
  • 毕业设计项目 python小游戏设计 吃豆人小游戏