簡體   English   中英

去http重用似乎在上傳文件中不起作用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM