我正在尝试在Golang中为一组web api编写一个重型代理。为了防止端口耗尽,我决定不使用DefaultClient
,而是为http.Client
创建一个自定义实例。在http.Transport
中有许多有趣的设置,我可以玩。
我遇到了MaxIdleConnsPerHost
和IdleConnTimeout
字段,我有这个问题。
如果我增加MaxIdleConnsPerHost
的值,这意味着会有更多的空闲连接,但它们是可重用的空闲连接吗?或者换句话说,为了创建一个体面的连接池,我是否应该相应地增加MaxIdleConnsPerHost
的值以及IdleConnTimeout
的超时,或者它的行为完全相反?
是的,IdleConns是可重用的,因为它们是keep-alive连接。但是,为了使golang能够支持keep-alive连接的可重用性,您需要在应用程序中确保两件事。
- 读取直到响应完成(即ioutil.ReadAll(rep.Body))
- 调用 Body.Close ()
这里有更多解释的链接。