为了账号安全,请及时绑定邮箱和手机立即绑定

HTTP 客户端挂起

HTTP 客户端挂起

Go
慕姐4208626 2021-10-25 20:16:44
我有一些代码可以生成大量简单的 HTTP GET 请求我使用的客户端设置如下:type client struct {    *http.Client    // other stuff in here}func NewClient() client {    var c client    c.Client = &http.Client{        CheckRedirect: func(req *http.Request, via []*http.Request) error {            req.Header.Set("User-Agent", c.userAgent)            return nil        },        Transport: &http.Transport{            Dial: func(network, addr string) (net.Conn, error) {                return net.DialTimeout(network, addr, 2*time.Second)            },            TLSHandshakeTimeout: 2 * time.Second,            TLSClientConfig: &tls.Config{                InsecureSkipVerify: true,            },        },        Timeout: 2 * time.Second,    }    return c}正如你所看到的,我真的在努力确保我在连接错误时超时。我提出这样的要求:req, err := http.NewRequest("GET", url, nil)那里没有什么异常。但是一段时间后,我建立了这些 goroutines 并且只是阻塞,一个在恐慌之后获取跟踪的例子:goroutine 325 [select, 4 minutes]:net/http.(*persistConn).writeLoop(0xc208075130)    /usr/local/go/src/net/http/transport.go:945 +0x41dcreated by net/http.(*Transport).dialConn    /usr/local/go/src/net/http/transport.go:661 +0xcbc和goroutine 418 [IO wait, 4 minutes]:net.(*pollDesc).Wait(0xc2083c7870, 0x72, 0x0, 0x0)    /usr/local/go/src/net/fd_poll_runtime.go:84 +0x47net.(*pollDesc).WaitRead(0xc2083c7870, 0x0, 0x0)    /usr/local/go/src/net/fd_poll_runtime.go:89 +0x43net.(*netFD).Read(0xc2083c7810, 0xc20857e000, 0x1000, 0x1000, 0x0, 0x7fbb634c3bb0, 0xc2084d87a0)    /usr/local/go/src/net/fd_unix.go:242 +0x40f我一直在努力观察netstat并tcpdump了解他们实际上遇到了什么问题,但现在证明它不是很有用。在跳入源头或对我的监控更加勤奋之前,我想我会抛出这个问题。这里发生了什么?..另外为什么我的超时不起作用?我需要设置另一个超时吗?(正如你所看到的,我只是继续设置我能找到的每一个,还有可能我也应该设置的响应头超时?我认为 http.Client 结构中的超时非常可靠并且会超时任何东西)最后,有没有办法设置我缺少的客户端端口,以便我可以更好地监控哪些连接有问题?编辑:为了记录,我也很确定我正在阅读/关闭每个请求的响应正文。除非有一些以某种方式挂起超时或我不知道的东西,但如果这是有人看到的唯一解决方案,我会再看一次。
查看完整描述

1 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

事实证明这些不是问题,它们似乎只是保持活动消息(尽管奇怪的是我KeepAlive: 0设置了?)。放错Done()位置sync.WaitGroup才是真正的罪魁祸首。我想我开始将 eachWait()视为被调用http.Client而不是被调用sync.WaitGroup


查看完整回答
反对 回复 2021-10-25
  • 1 回答
  • 0 关注
  • 377 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信