连接池:MaxIdleConnsPerHost和IdleConnTimeout在http.Transport中的交互.&



我正在尝试在Golang中为一组web api编写一个重型代理。为了防止端口耗尽,我决定不使用DefaultClient,而是为http.Client创建一个自定义实例。在http.Transport中有许多有趣的设置,我可以玩。

我遇到了MaxIdleConnsPerHostIdleConnTimeout字段,我有这个问题。

如果我增加MaxIdleConnsPerHost的值,这意味着会有更多的空闲连接,但它们是可重用的空闲连接吗?或者换句话说,为了创建一个体面的连接池,我是否应该相应地增加MaxIdleConnsPerHost的值以及IdleConnTimeout的超时,或者它的行为完全相反?

是的,IdleConns是可重用的,因为它们是keep-alive连接。但是,为了使golang能够支持keep-alive连接的可重用性,您需要在应用程序中确保两件事。

  1. 读取直到响应完成(即ioutil.ReadAll(rep.Body))
  2. 调用 Body.Close ()

这里有更多解释的链接。

最新更新