[英]Go http reuse seem doesn't work in upload file
当我使用go(1.8)http lib执行常规的GET / POST方法时,它可以正常工作,如果我尝试使用http lib将文件上传到服务器,则客户端会创建很多套接字。 在我的测试中,文件被分割成5个goroutine上载,客户端保留250个套接字。 我已经添加了defer resp.Body.Close()
,这里的关键代码是:
const (
MaxIdleConns int = 40
MaxIdleConnsPerHost int = 40
)
transport := &http.Transport{
MaxIdleConns: MaxIdleConns,
MaxIdleConnsPerHost: MaxIdleConnsPerHost,
IdleConnTimeout: 15 * time.Second,
ResponseHeaderTimeout: Time.Hour,
}
client := &http.Client{
Transport: transport,
Timeout: time.Second * 30,
}
这250个套接字仅在客户端退出后回收。
这只是一个愚蠢的问题,lib不会重用http客户端,感谢您的帮助。在这里,我的新传输定义:
const (
MaxIdleConnsPerHost = 10
MaxIdleConns = 100
)
transport := &http.Transport{
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}).DialContext,
MaxIdleConns: MaxIdleConns,
MaxIdleConnsPerHost: MaxIdleConnsPerHost,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 5 * time.Second,
}
我为每个http请求缓存了http客户端,而不是新的http.Client。 去doc recommand重用客户端
//客户端的传输通常具有内部状态(缓存的TCP //连接),因此应重用客户端,而不是根据需要创建客户端。 客户端可以安全地被多个goroutine并发使用。 https://golang.org/src/net/http/client.go
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.