繁体   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