[英]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.