乐趣区

关于go:Go-httpTransport-主要参数说明

在 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.ClientTransport 成员类型是 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。

退出移动版