Go:HTTP长连接

一、演示

package mainimport ("fmt""io""io/ioutil""log""net""net/http""net/url""sync""time"
)var (client *http.Clientonce   sync.Once
)func CreateHTTPClient() *http.Client {// 使用单例创建clientonce.Do(func() {client = &http.Client{Transport: &http.Transport{DialContext: (&net.Dialer{Timeout:   30 * time.Second,KeepAlive: 30 * time.Second,}).DialContext,MaxIdleConns:        100,              // 最大连接数,默认0无穷大MaxIdleConnsPerHost: 100,              // 对每个host的最大连接数量(MaxIdleConnsPerHost<=MaxIdleConns)IdleConnTimeout:     90 * time.Second, // 多长时间未使用自动关闭连接},}})return client
}func main() {client := CreateHTTPClient()req, err := http.NewRequest("get", "https://www.baidu.com", nil)if err != nil {log.Fatal(err)}res, err := client.Do(req)if err != nil {log.Fatal(err)}io.Copy(ioutil.Discard, res.Body)res.Body.Close()
}

二、源码分析

(一)Transport默认实现

var DefaultTransport RoundTripper = &Transport{Proxy: ProxyFromEnvironment,DialContext: (&net.Dialer{Timeout:   30 * time.Second,KeepAlive: 30 * time.Second,DualStack: true,}).DialContext,MaxIdleConns:          100,IdleConnTimeout:       90 * time.Second,TLSHandshakeTimeout:   10 * time.Second,ExpectContinueTimeout: 1 * time.Second,
}

(二)字段解析

1、MaxIdleConns

最大连接数,默认0无限

2、MaxIdleConnsPerHost

const DefaultMaxIdleConnsPerHost = 2

同一个host最大连接数(MaxIdleConnsPerHost<=MaxIdleConns),如果不设置默认使用DefaultMaxIdleConnsPerHost

3、IdleConnTimeout

多长时间未使用自动关闭连接

三、注意

(一)请求头Connection

http1.0默认短连接,需要连接复用需要显式添加头Connection: keep-alive
http1.1默认长连接,默认:Connection: keep-alive,如果需要当前请求完成关闭连接添加Connection: close

(二)关于响应body数据

只要请求响应包含响应body必须读取出来,否则无法复用连接。如果响应数据不需要可以使用下面示例丢弃响应

io.Copy(ioutil.Discard, res.Body)

四、参考

  • go net/http Client使用——长连接客户端的使用

Go:HTTP长连接相关推荐

  1. php 长连接心跳_支持gRPC长链接,深度解读Nacos2.0架构设计及新模型

    作者 | 杨翊(席翁) Nacos PMC 来源|阿里巴巴云原生公众号 Nacos 简介 Nacos 在阿里巴巴起源于 2008 年五彩石项目,该项目完成了微服务拆分和业务中台建设,随着云计算和开源环 ...

  2. 使用 .NET 实现 Ajax 长连接

    作者:http://www.cnblogs.com/cathsfz/ Ajax的长连接,或者有些人所说的Comet,就是指以XMLHttpRequest的方式连接服务器,连接后服务器并非即时写入相应并 ...

  3. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll、Epoll模型处理长连接性能比较

    在<朴素.Select.Poll和Epoll网络编程模型实现和分析--模型比较>一文中,我们分析了各种模型在处理短连接时的能力.本文我们将讨论处理长连接时各个模型的性能.(转载请指明出于b ...

  4. 长连接及在Node中的应用——HTTP/1.1 keep-alive

    HTTP请求都要经过TCP三次握手建立连接,四次分手断开连,如果每个HTTP请求都要建立TCP连接的话是极其费时的,因此HTTP/1.1中浏览器默认开启了Connection: keep-alive. ...

  5. python使用socket实现协议TCP长连接框架

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 使用python实现协议中常见的TCP长连接框架." 分析多了协议就会发现,很多的应用,特别是游戏类和IM类应用,它们的协议会使用 ...

  6. 通da信TCP长连接数据算法分析

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 分析通da信TCP长连接内部分数据的算法." 作为一款老牌的炒股软件,通da信里面的数据是相当的丰富,免费的也很丰富,准确性也很好 ...

  7. 跨进程通信,到底用长连接还是短连接

    一个完整的软件系统大多数情况下是由多个进程共同协作进行的,哪怕它们在同一台服务器上.所以,进程之间如何进行高效的通信至关重要. 单个应用程序+单个数据库这套基础开发套餐我相信每个人都经历过,甚至在初期 ...

  8. JAVA实现长连接(含心跳检测)Demo

    实现原理: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的.        如果,长时间未发送维持连接包,服务端程序将断开连接. 客户端:        Client通过持有So ...

  9. 知乎千万级高性能长连接网关是如何搭建的

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:https://www.xttblog.com/?p=487 ...

  10. TCP长连接与短链接

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...

最新文章

  1. 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part1
  2. java ee api_Java EE并发API教程
  3. python的动态参数
  4. F10-MYSQL的yum源码
  5. office 在线浏览和编辑 部署 Office Web Apps Server
  6. VC++2012编程演练数据结构《14》链式堆栈
  7. 微软服务器补丁每月几号发布,微软11月安全公告 发布一个紧急级补丁
  8. 今日头条阅读量怎么刷_自动刷今日头条阅读量 头条号自己刷阅读量
  9. 2012-2013考研英语词汇
  10. PageHelper.startPage(pageNum,pageSize)分页不起作用
  11. http://www.ha97.com/
  12. 用flex做的3D坦克游戏
  13. android触摸屏映射,解决android4.0 触摸屏分辨率映射不准
  14. 加州圣塔克拉拉大学计算机专业,圣塔克拉拉大学在美国排位
  15. 常用的几种集合(Map另写)
  16. Linux下安装ORACLE(一周成果、全是干货!)
  17. 【mysql】 踩坑记录之derived(派生表)
  18. C语言中求最大公约数的算法(三种)
  19. 智能电饭煲电路图及其原理_智能电饭煲工作原理及框架图
  20. MySQL 常用命令速查表:日常开发、求职面试必备良方!

热门文章

  1. Linux服务器使用网络代理
  2. 企业管理中使用凌云仓库管理软件免费版的优势
  3. zfs文件服务器上传失败,解决 ZFS 文件系统问题
  4. MDM页面UI升级介绍
  5. 三年级下册计算机知识点,【北师大】三年级下册语文各单元知识点归纳
  6. php电子面单打印快递100,使用快递100软件打印电子面单设置操作教程
  7. 什么是芯片加速器 Accelerator
  8. 一个有情怀的PPT模板下载网站
  9. 轻松打造企业内部NOD32升级服务器
  10. 计算机汇编语言教程pdf,汇编语言实践教程.pdf