在测试场景中,可能需要禁用 Go 的 HTTP 客户端中的连接池来为每个 HTTP/ 创建新的 TCP 连接1.x 请求。本指南探讨了实现此目的的各种方法。
http.Client 使用的默认 http.Transport 启用连接池,这可能会很不方便。要禁用池化,可以将 Transport.MaxIdleConnsPerHost 设置为负值或将 Transport.DisableKeepAlives 设置为 true。
Keep-alives 通常用于维护持久性连接,但将 Transport.DisableKeepAlives 设置为 true 会强制客户端在每次请求后关闭连接。这种方法添加了一个“Connection: close”请求头,可以设置如下:
t := http.DefaultTransport.(*http.Transport).Clone() t.DisableKeepAlives = true c := &http.Client{Transport: t}
MaxIdleConnsPerHost,当设置为 -1 时,将每个主机的空闲连接数限制为 0。这会有效地禁用池化:
t := http.DefaultTransport.(*http.Transport).Clone() t.MaxIdleConnsPerHost = -1 c := &http.Client{Transport: t}
Dialer.KeepAlive 似乎是一个选项用于禁用池化,但它仅设置活动连接的保持活动期限。池化不受此设置的影响。
如果需要,您可以将上述选项与使用的 Transport 对象中的 DialContext、TLSHandshakeTimeout、ResponseHeaderTimeout 和 ExpectContinueTimeout 的自定义设置结合起来。 http.Client.
需要注意的是,池限制并不限于每个主机的活动连接数。但是,MaxIdleConnsPerHost 和 DisableKeepAlives 等选项提供了出于测试目的禁用池的有效方法。
以上是如何在 Go 的 HTTP 客户端中禁用连接池以进行测试?的详细内容。更多信息请关注PHP中文网其他相关文章!