news 2026/8/3 19:03:10

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/8/1 18:54:18

基于hive的抖音平台视频热度数据分析系统的设计与实现申报表

河南工程学院本科毕业设计课题申报表课题 情况课题名称基于hive的抖音平台视频热度数据分析系统的设计与实现课题来源工程实践教师姓名彭天强职称副教授学位博士主要 研究 内容 目标一、课题简介本系统根植于大数据技术框架,随着数据量的激增和数据处理需求的复杂化…

作者头像 李华
网站建设 2026/8/2 13:26:07

LangFlow能否接入私有化部署的大模型?内网调用实测

LangFlow能否接入私有化部署的大模型?内网调用实测 在企业AI应用落地的过程中,一个现实问题日益凸显:如何在保障数据安全的前提下,快速验证大模型的能力?许多组织已将核心业务系统与敏感数据隔离于内网环境中&#xff…

作者头像 李华
网站建设 2026/8/2 17:32:26

2012—2024年上市公司人工智能概念炒作水平度量,含专利、词频等原始数据

数据简介 人工智能概念炒作水平度量数据是刻画上市公司人工智能信息披露真实性与机会主义行为的核心载体,其精准度直接决定对“概念炒作—大股东减持”传导机制的实证检验效果。该数据聚焦于量化企业在人工智能领域的“言”与“行”差异,通过文本分析与…

作者头像 李华
网站建设 2026/8/2 4:43:26

告别手写代码:使用LangFlow图形化界面构建AI智能体全流程

告别手写代码:使用LangFlow图形化界面构建AI智能体全流程 在如今这个大模型遍地开花的时代,越来越多的团队开始尝试将大语言模型(LLM)集成到产品中——从智能客服到知识问答系统,再到自动化办公助手。但现实往往不如愿…

作者头像 李华
网站建设 2026/8/1 18:11:10

AI 创业这三年:我的三次认知迭代与自我修正

如果从 2022 年算起,我踏入 AI 创业这条河,已经整整三年了。 在 AI 这个“天上一天,人间一年”的行业里,三年算是一段很长的时间。这段时间里,我以用户的身份观察过,也以创业者的身份下场实践过。见过大模型…

作者头像 李华
网站建设 2026/8/2 0:59:56

Android 10.0 Launcher3抽屉式背景设为透明,去掉上滑时的白色背景

1.前言 在10.0的系统rom定制化开发中,在某些时候上划抽屉的时候,会有一个白色的背景,在某些产品中,客户要求需要修改 这个白色背景,所以接下来看下这个背景是怎么出现的,来解决这个问题 2.Launcher3抽屉式背景设为透明,去掉上滑时的白色背景的核心类 packages/apps/La…

作者头像 李华