news 2026/5/12 6:37:26

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 环境下,队列是安全且可扩展的解法
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 0:54:38

基于Hive的淘宝彩妆销售数据的设计与实现开题报告

河北东方学院 本科毕业论文(设计)开题报告 题目 : 宋体四号居中 学院 : 人工智能学院 专业 : 与教务系统专业一致 班级 : 与教务系统班级一致 学生姓名 : 张三 学 号 …

作者头像 李华
网站建设 2026/5/11 11:01:34

字符输入频繁失败?Open-AutoGLM高频Bug应对策略,一文搞定

第一章:字符输入缺失问题的现状与影响字符输入缺失是指在软件系统中,用户输入的文本内容未能被正确捕获、处理或保存的现象。这一问题广泛存在于Web应用、移动客户端以及嵌入式系统中,严重影响用户体验与数据完整性。问题表现形式 用户在表单…

作者头像 李华
网站建设 2026/5/12 9:25:12

Open-AutoGLM文本生成异常处理(重复输入修复全解析)

第一章:Open-AutoGLM文本生成异常处理概述在基于Open-AutoGLM的文本生成系统中,异常处理是保障服务稳定性与输出质量的关键环节。由于模型依赖复杂的上下文推理机制,输入扰动、资源限制或内部逻辑错误均可能导致生成结果偏离预期。建立完善的…

作者头像 李华
网站建设 2026/5/13 2:39:12

Open-AutoGLM滑动功能崩溃怎么办?(90%开发者忽略的底层机制曝光)

第一章:Open-AutoGLM滑动操作失效的根源解析在使用 Open-AutoGLM 框架进行移动端自动化测试时,部分用户反馈滑动(swipe)操作无法正常触发或执行后无响应。该问题并非框架本身功能缺失,而是由多个底层机制冲突与环境适配…

作者头像 李华
网站建设 2026/5/13 2:19:38

揭秘Open-AutoGLM滑动无响应之谜:5个关键修复方案立即生效

第一章:揭秘Open-AutoGLM滑动无响应之谜:现象与根源在使用 Open-AutoGLM 框架进行自动化任务编排时,部分用户反馈界面滑动操作频繁出现无响应现象。该问题主要表现为:拖拽节点时界面卡顿、流程图缩放失效、长时间无反馈导致操作中…

作者头像 李华
网站建设 2026/5/10 2:00:07

【Open-AutoGLM文本修复终极指南】:5步彻底解决输入重复顽疾

第一章:Open-AutoGLM文本输入重复顽疾的全面认知在实际应用中,Open-AutoGLM模型常面临文本输入重复的问题,这一现象严重影响生成结果的准确性和可读性。该问题并非源于模型结构本身,而是由输入预处理不当、上下文缓存管理缺失以及…

作者头像 李华