开发者

Go http.Transport 主要参数说明

开发者 https://www.devze.com 2023-11-21 10:42 出处:网络 作者: amc
目录正文http.Transport 类型说明http.Transport 主要参数DefaultTransport 配置DialContext 简单示例Reference正文
目录
  • 正文
  • 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,表示 不使用 任何代理,请注意
DialContextTCP 连接函数。开发者可以简单封装一下,一般可以用来做一些监控或者特殊的地址解析逻辑nil, 使用默认的 http 连接
超时控制类
TLSHandShakeTimeouttime.Duration 类型,表示TLS 握手超时时间。这里推荐传入一个非零值0, 表示无限制
IdleConnTimeouttime.Duration android类型,表示一个连接在空闲多久之后关闭。0, 表示不关闭
连接数控制类
MaxIdleConns最大空闲连接数0, 表示无限制
MaxIdleConnsPerHost每一个 host 的最大连接数http.DefaultMaxIdleConnsPerHost,即 2
缓冲区类
WriteBufferSize写缓冲区的大小4kB
ReadBufferSize读缓冲区的大小4kB
其他
ForceAttemptHTTP2字面意思,是否强制尝试 HTTP2。建议编程客栈设置js为 truefalse, 不尝试

DefaultTransport 配置

http.DefaultTransport 是基于 http.Transport 实现的,其配置说明如下:

参数
Proxyhttp.ProxyFromEnvironment 即 follow 系统配置
DialContextnet.Dialer 类型的 DialContext 方法
TLSHandShakeTimeout10 秒
IdleConnTimeout90 秒
MaxIdleConns100
MaxIdleConnsPerHosthttp.DefaultMaxIdleConnsPerHost,即 2
WriteBufferSize4kB
ReadBufferSize4kB
ForceAttemptHTTP2true

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参数的资料请关注我们其它相关文章!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号