首页 > 其他分享 >Go HTTP Client 持久连接失效

Go HTTP Client 持久连接失效

时间:2023-09-06 11:31:36浏览次数:44  
标签:HTTP 请求 Client Go 连接 Transport

调用 Go 的 HTTP Client 的 Get\Post 之类的方法时,默认是开启 HTTP keepalive 的,不过直接使用还是会遇到一些情况导致持久连接失效。首先,Client 构造好 HTTP 请求后,利用 Transport 来发送请求并等待结果,默认使用 DefaultTransport 来实现,大多数情况下,自定义 Client 时,配置一下自带的 Transport 即可。

transport 主要围绕着 persistConn 来实现,通过当前请求的 proxyschemeaddr 作为 Key,对已经建立的连接进行缓存,新的请求来时,先从缓存中取一个连接,如果没有,再新发起一个连接。按照 Go 的基本法,毫无疑问会有两个 goroutine 来分别处理连接上的读和写,然后各种 channel 就开始飞来飞去,于是便让人深思这真的会比基于事件回调的实现简单吗。

可见每次都会有一个请求是新建了个 TCP 连接的,也就是说默认只保持两条持久连接,这是因为这里自定义的的 http.Transport 没有设置 MaxIdleConnsPerHost,于是便采用了默认的 DefaultMaxIdleConnsPerHost,这个值是 2,这是 RFC2616 建议的单个客户端发起的持久连接数,不过在大部分情况下,这个值有点过于保守了。如果把 MaxIdleConnsPerHost 设置为 3,结果便和第一种情况一样。

参考链接https://doc.xuwenliang.com/docs/go/1201

标签:HTTP,请求,Client,Go,连接,Transport
From: https://blog.51cto.com/lookingdream/7384837

相关文章

  • Go如何自动解压缩包?如何读取docx/doc文件内容?
    在开发过程中,我们常常需要处理压缩包和文档文件。本文将介绍如何使用Go语言自动解压缩包和读取docx/doc文件。一、解压缩包压缩包格式常见的压缩包格式有zip、gzip、bzip2等。在Go语言中,使用archive/zip、compress/gzip、compress/bzip2包可以轻松地处理这些格式......
  • Sphingobium鞘脂菌属
    鞘脂菌属(学名:Sphingobium)为鞘脂单胞菌科的一个属。该属的模式种为(Sphingobiumyanoikuyae)。1、NEWBing的回答Sphingobium是一种革兰氏阴性的细菌属,属于拟杆菌门,广泛分布在土壤、水体和植物根际中。Sphingobium对植物有以下几种作用:降解有机污染物。Sphingobium能够利用多......
  • Go学习笔记1
    学习路线2023-Go全链路工程师课纲https://www.processon.com/view/link/63594cd97d9c0854f9ac855e一、搭建环境https://studygolang.com/dlmsi需要自己安装安装目录最好没有中文1.简单dos命令进入磁盘D:,C:查看目录结构dir进入目录......
  • 浅析Golang的层级时间轮实现方案
    文章目录时间轮介绍简单时间轮层级时间轮kafka中的实现细节基于go语言的层级时间轮实现 一、时间轮介绍工作中,我们经常遇到到延时任务这类需求(例如用户开始一个任务,15分钟后给他发送一个通知奖励;用户下单未付款,三分钟后发送一条提醒消息...)。一般情况下,我们......
  • Go 语言请求DNS解析结果
    packageksyunwarningimport("context""fmt""net""time")//LookupDomainNameIp使用net包做DNS解析请求funcLookupDomainNameIp(domainString,nameServerstring)(dst[]string){r:=&net.Resolve......
  • 1521A - Nastia and Nearly Good Numbers
    A.NastiaandNearlyGoodNumbershttps://codeforces.com/problemset/problem/1521/A"""思路:1.就是普通的打印,NO的情况是只有b=1的时候才会出现,其他的都是YES,如果不想再继续分情况就把a*b放在中间做y,或者做x也可,避免(b-1)=1,最后要x+y=z"""forlinein[*open(0)......
  • RunnerGo——更高效、更易用的性能测试利器
    随着互联网技术的迅速发展,性能测试已成为保障应用程序顺畅运行的关键环节。在众多性能测试工具中,RunnerGo以其独特的优势,逐渐成为了开发者和测试人员的首选。本文将详细介绍RunnerGo的特点,并对比其与JMeter的优势,让您了解RunnerGo为何成为高效、易用的性能测试利器。RunnerGo的特点......
  • pycharm打开django项目
    1、file-open,用pycharm加载django项目2、打开后,点击setting配置环境   file--setting--PythonInterpreter--配置python解析器    3、找到django项目的manage.py文件,运行manage.py文件4、点开配置,parameters:runserver           ......
  • RunnerGo——更高效、更易用的性能测试利器
    随着互联网技术的迅速发展,性能测试已成为保障应用程序顺畅运行的关键环节。在众多性能测试工具中,RunnerGo以其独特的优势,逐渐成为了开发者和测试人员的首选。本文将详细介绍RunnerGo的特点,并对比其与JMeter的优势,让您了解RunnerGo为何成为高效、易用的性能测试利器。 RunnerGo......
  • go开发之个微机器人的开发
    简要描述:发送emoji动图表情请求URL:http://域名地址/sendEmoji请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是string登录实例标识wcId是string接收人微信id/群idimageMd5是string取回调中xml中md5字段值imgSize是str......