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

在 Golang 中复用 HTTP 连接

问题提出

最近在实现一个转发大模型调用请求的中转功能,涉及到要构造client发送请求的内容,一开始我每次都是新建一个client来发送请求,这样的代码实现存在一些问题——每次都要构造新的client,并且要重新建立连接。后面了解到在Go中使用 HTTP 客户端(http.Client)可以实现连接复用,做到提高性能并减少 TCP 连接的重复建立。

// 原始做法
client := &http.Client{Timeout: consts.GetRequestTimeout(), // 设置请求超时时间}resp, err := client.Do(req)
defer resp.Body.Close()// 修改后做法
resp, err := sharedHttpClient.Do(req)
defer resp.Body.Close()// 必须关闭 Body 才能复用连接

原理探寻

在 Go 中,HTTP 客户端默认会复用 TCP 连接,只要使用同一个 http.Client 实例,并且服务端支持 Keep-Alive

原因是 http.Transport 内部维护了一个 连接池。只要满足以下条件就可以进行连接复用:

  1. 使用同一个 http.Client
  2. 响应的 Body 被正确关闭。
  3. 请求的 Host 相同。

Transport 会根据空闲连接数和超时管理复用,可根据需求调整Transport相关的参数。

http://www.lryc.cn/news/626657.html

相关文章:

  • 26_基于深度学习的茶叶等级检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • CTFshow系列——命令执行web38-40
  • Qt音乐播放器项目实践:本地持久化与边角问题处理
  • 小红书账号隔离:解决IP关联问题方案
  • 网络工程师考试重点:OSI七层模型TCP/IP四层模型解析
  • 【北京迅为】iTOP-4412精英版使用手册-第三十二章 网络通信-TCP套字节
  • yolo_RK3588系列(三)
  • 5.4 4pnpm 使用介绍
  • FreeRTOS---进阶知识1---列表的创建
  • SQL 中大于小于号的表示方法总结
  • Claude Code NPM 包发布命令
  • 内网安全——出网协议端口探测
  • Java开源工具Apache PDFBox(强大的处理 PDF文档工具:创建、读取、修改、解析和提取 PDF)
  • Apache ShenYu和Nacos之间的通信原理
  • 【Tech Arch】Apache Pig大数据处理的高效利器
  • Spring Boot 日志体系详解:配置与实战
  • 三、k8s 1.29 之 资源清单
  • 网络编程5(HTTPS)
  • 【考研408数据结构-08】 图论基础:存储结构与遍历算法
  • Linux的奇妙冒险——进程pcb第二讲
  • 云原生俱乐部-k8s知识点归纳(5)
  • SpringTask入门
  • 关于多个el-input的自动聚焦,每输入完一个el-input,自动聚焦到下一个
  • Rust并发编程:解锁高性能系统的密钥
  • 第12课_Rust项目实战
  • 批处理指令常见问题
  • 软考高级--系统架构设计师--案例分析真题解析
  • 【clion】cmake脚本1:调试脚本并构建Fargo项目win32版本
  • 无需驱动!单文件实现键盘按键禁用的技术方案
  • 使用Jmeter轻松实现AES加密测试