我为HTTP2连接建立了一个http.Client,我需要做什么来释放所使用的客户端和资源?
发布于 2016-04-18 16:31:53
http.Client不需要任何特殊的方式来释放“使用的”资源。当它变得不可访问时,它所使用的内存将被垃圾回收器回收。
http.Client不存储连接或状态信息。文档甚至声明http.Client应该被重用:
TCP客户端的传输通常具有内部状态(缓存的
连接),因此应该重用客户端,而不是根据需要创建客户端。多个goroutine并发使用客户端是安全的。
如果您使用(例如嵌入) http.Client构建自己的客户端,并分配必须显式释放的资源,请在其上提供您自己的Close()方法,并记录使用您自己的实现的任何人在不再需要Close()时必须调用它。
备注:
你可能会混淆的是,如果你使用一个http.Client来做HTTP操作(如Client.Do(),Client.Get(),Client.Post()等),它们会返回一个值*http.Response,并且该响应确实保存了一个连接,状态和其他资源,需要释放这些资源,通常是通过Response.Body.Close()。引用自http的包文档
完成后,客户端必须关闭响应正文:
resp,err := http.Get("http://example.com/") if err != nil { //处理错误}延迟resp.Body.Close()正文,err := ioutil.ReadAll(resp.Body) // ...
在Client.Get()上也有相关文档
当err为nil时,
始终包含非nil的resp.Body。调用者应在完成读取后关闭resp.Body。
发布于 2019-11-05 01:10:35
CloseIdleConnections()方法是在Go 1.12中添加的。
https://golang.org/pkg/net/http/#Client.CloseIdleConnections
CloseIdleConnections关闭其传输上的所有连接,这些连接以前是从先前的请求连接的,但现在处于空闲状态,处于“保持活动”状态。它不会中断当前正在使用的任何连接。
https://stackoverflow.com/questions/36688633
复制相似问题