目录
- 正文
- http.Transport 类型说明
- http.Transport 主要参数
- DefaultTransport 配置
- DialContext 简单示例
- Reference
正文
在 Go 中创建一个 http client 时,一般会使用 Go http 包的 Transport 类型。本文主要说明 http.Transport 需要关注的主要参数。
http.Transport 类型说明
首先我们要明确的是,我们开发 http client 的时候,经常会这么写:
client := &http.Client{ Transport: http.DefaultTransport, }
但细看可以发现,http.Client 的 Transport 成员类型是 http.RoundTripper,而不是 http.Transport 类型。换句话说,开发者完全可以抛弃原生的实现,自己定制一份 httwww.devze.comp.RoundTripper 接口来实现一个完整的 http 调用。不过这不在本文说明范围内。
http.Transport 主要参数
该类型通过一系列的参数来决定其行为。请注意的是,同样数据类型的不同参数,其表达的默认值是不同的。
参数 | 作用 | 默认值 |
---|---|---|
连接控制类 | ||
Proxy | 指定使用 http 代理。这里推荐传入 http.ProxyFromEnvironment, 以支持系统配置的 http 代理 | nil,表示 不使用 任何代理,请注意 |
DialContext | TCP 连接函数。开发者可以简单封装一下,一般可以用来做一些监控或者特殊的地址解析逻辑 | nil, 使用默认的 http 连接 |
超时控制类 | ||
TLSHandShakeTimeout | time.Duration 类型,表示TLS 握手超时时间。这里推荐传入一个非零值 | 0, 表示无限制 |
IdleConnTimeout | time.Duration android类型,表示一个连接在空闲多久之后关闭。 | 0, 表示不关闭 |
连接数控制类 | ||
MaxIdleConns | 最大空闲连接数 | 0, 表示无限制 |
MaxIdleConnsPerHost | 每一个 host 的最大连接数 | http.DefaultMaxIdleConnsPerHost,即 2 |
缓冲区类 | ||
WriteBufferSize | 写缓冲区的大小 | 4kB |
ReadBufferSize | 读缓冲区的大小 | 4kB |
其他 | ||
ForceAttemptHTTP2 | 字面意思,是否强制尝试 HTTP2。建议编程客栈设置js为 true | false, 不尝试 |
DefaultTransport 配置
http.DefaultTransport 是基于 http.Transport 实现的,其配置说明如下:
参数 | 值 |
---|---|
Proxy | http.ProxyFromEnvironment 即 follow 系统配置 |
DialContext | net.Dialer 类型的 DialContext 方法 |
TLSHandShakeTimeout | 10 秒 |
IdleConnTimeout | 90 秒 |
MaxIdleConns | 100 |
MaxIdleConnsPerHost | http.DefaultMaxIdleConnsPerHost,即 2 |
WriteBufferSize | 4kB |
ReadBufferSize | 4kB |
ForceAttemptHTTP2 | true |
DialContext 简单示例
func dialContext(ctx context.Context, network, addr string) (net.Conn, error) { // 注: 这里无视了 ctx 的超时, 实际上应该加上 log.Debugf("request connecting %v, %v", network, addr) tcpAddr, err := net.ResolveTCPAddr(network, addr) if err != nil { return nil, fmt.Errorf("resolve %s failed: %w", addr, err) } conn, err := net.DialTCP(network, nil, tcpAddr) if err != nil { return nil, fmt.Errorf("connect to %v failed: %w", tcpAddr, err) } www.devze.com return conn, nil }
Reference
- 官方文档
- golang TCP server and Client Example
- Create a TCP anf UDP Client and Server using Go
以上就是Go http.Transport 主要参数说明的详细内容,更多关于Go http.Transport参数的资料请关注我们其它相关文章!
精彩评论