在 Go 中创立一个 http client 时,个别会应用 Go http
包的 Transport
类型。本文次要阐明 http.Transport
须要关注的主要参数。
- http.Transport 类型阐明
- http.Transport 主要参数
- DefaultTransport 配置
- DialContext 简略示例
- Reference
http.Transport 类型阐明
首先咱们要明确的是,咱们开发 http client 的时候,常常会这么写:
client := &http.Client{Transport: http.DefaultTransport,}
但细看能够发现,http.Client
的 Transport
成员类型是 http.RoundTripper
,而不是 http.Transport
类型。换句话说,开发者齐全能够摈弃原生的实现,本人定制一份 http.RoundTripper
接口来实现一个残缺的 http 调用。不过这不在本文阐明范畴内。
http.Transport 主要参数
该类型通过一系列的参数来决定其行为。请留神的是,同样数据类型的不同参数,其表白的默认值是不同的。
参数 | 作用 | 默认值 |
---|---|---|
连贯管制类 | ||
Proxy |
指定应用 http 代理。这里举荐传入 http.ProxyFromEnvironment , 以反对系统配置的 http 代理 |
nil ,示意 不应用 任何代理,请留神 |
DialContext |
TCP 连贯函数。开发者能够简略封装一下,个别能够用来做一些监控或者非凡的地址解析逻辑 | nil , 应用默认的 http 连贯 |
超时管制类 | ||
TLSHandShakeTimeout |
time.Duration 类型,示意 TLS 握手超时工夫。这里举荐传入一个非零值 |
0, 示意无限度 |
IdleConnTimeout |
time.Duration 类型,示意一个连贯在闲暇多久之后敞开。 |
0, 示意不敞开 |
连接数管制类 | ||
MaxIdleConns |
最大闲暇连接数 | 0, 示意无限度 |
MaxIdleConnsPerHost |
每一个 host 的最大连接数 | http.DefaultMaxIdleConnsPerHost ,即 2 |
缓冲区类 | ||
WriteBufferSize |
写缓冲区的大小 | 4kB |
ReadBufferSize |
读缓冲区的大小 | 4kB |
其余 | ||
ForceAttemptHTTP2 |
字面意思,是否强制尝试 HTTP2。倡议设置为 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)
}
return conn, nil
}
Reference
- 官网文档
- Golang TCP server and Client Example
- Create a TCP anf UDP Client and Server using Go
本文章采纳 常识共享署名 - 非商业性应用 - 雷同形式共享 4.0 国内许可协定 进行许可。
原作者:amc,原文公布于云 + 社区,也是自己的博客。欢送转载,但请注明出处。
原作者:amc,欢送转载,但请注明出处。
原文题目:《Go http.Transport 主要参数阐明》
公布日期:2023-05-25
原文链接:https://cloud.tencent.com/developer/article/2291318。