Go:HTTP长连接
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长连接相关推荐
- php 长连接心跳_支持gRPC长链接,深度解读Nacos2.0架构设计及新模型
作者 | 杨翊(席翁) Nacos PMC 来源|阿里巴巴云原生公众号 Nacos 简介 Nacos 在阿里巴巴起源于 2008 年五彩石项目,该项目完成了微服务拆分和业务中台建设,随着云计算和开源环 ...
- 使用 .NET 实现 Ajax 长连接
作者:http://www.cnblogs.com/cathsfz/ Ajax的长连接,或者有些人所说的Comet,就是指以XMLHttpRequest的方式连接服务器,连接后服务器并非即时写入相应并 ...
- 朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll、Epoll模型处理长连接性能比较
在<朴素.Select.Poll和Epoll网络编程模型实现和分析--模型比较>一文中,我们分析了各种模型在处理短连接时的能力.本文我们将讨论处理长连接时各个模型的性能.(转载请指明出于b ...
- 长连接及在Node中的应用——HTTP/1.1 keep-alive
HTTP请求都要经过TCP三次握手建立连接,四次分手断开连,如果每个HTTP请求都要建立TCP连接的话是极其费时的,因此HTTP/1.1中浏览器默认开启了Connection: keep-alive. ...
- python使用socket实现协议TCP长连接框架
点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 使用python实现协议中常见的TCP长连接框架." 分析多了协议就会发现,很多的应用,特别是游戏类和IM类应用,它们的协议会使用 ...
- 通da信TCP长连接数据算法分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 分析通da信TCP长连接内部分数据的算法." 作为一款老牌的炒股软件,通da信里面的数据是相当的丰富,免费的也很丰富,准确性也很好 ...
- 跨进程通信,到底用长连接还是短连接
一个完整的软件系统大多数情况下是由多个进程共同协作进行的,哪怕它们在同一台服务器上.所以,进程之间如何进行高效的通信至关重要. 单个应用程序+单个数据库这套基础开发套餐我相信每个人都经历过,甚至在初期 ...
- JAVA实现长连接(含心跳检测)Demo
实现原理: 长连接的维持,是要客户端程序,定时向服务端程序,发送一个维持连接包的. 如果,长时间未发送维持连接包,服务端程序将断开连接. 客户端: Client通过持有So ...
- 知乎千万级高性能长连接网关是如何搭建的
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:https://www.xttblog.com/?p=487 ...
- TCP长连接与短链接
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...
最新文章
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part1
- java ee api_Java EE并发API教程
- python的动态参数
- F10-MYSQL的yum源码
- office 在线浏览和编辑 部署 Office Web Apps Server
- VC++2012编程演练数据结构《14》链式堆栈
- 微软服务器补丁每月几号发布,微软11月安全公告 发布一个紧急级补丁
- 今日头条阅读量怎么刷_自动刷今日头条阅读量 头条号自己刷阅读量
- 2012-2013考研英语词汇
- PageHelper.startPage(pageNum,pageSize)分页不起作用
- http://www.ha97.com/
- 用flex做的3D坦克游戏
- android触摸屏映射,解决android4.0 触摸屏分辨率映射不准
- 加州圣塔克拉拉大学计算机专业,圣塔克拉拉大学在美国排位
- 常用的几种集合(Map另写)
- Linux下安装ORACLE(一周成果、全是干货!)
- 【mysql】 踩坑记录之derived(派生表)
- C语言中求最大公约数的算法(三种)
- 智能电饭煲电路图及其原理_智能电饭煲工作原理及框架图
- MySQL 常用命令速查表:日常开发、求职面试必备良方!