回答

收藏

在 Go 中重用 http 连接

技术问答 技术问答 316 人阅读 | 0 人回复 | 2023-09-12

目前正在努力寻找 Go 中制作 HTTP 帖子时重用连接法。
' q' R6 n7 |; T! r4 T3 @我创建了传输和客户端,如下所示:
7 |1 Z% y) j0 a& I1 `
    // Create a new transport and HTTP clienttr := &http.Transport{}client := &http.Client{Transport: tr}
    1 c$ n, w* m& W( [
然后我把这个客户端指针传递给 goroutine 中,该 goroutine 将多个帖子发送到同一端点,如下所示:
2 x( ~. U+ U5 C! U: y
    r,err := client.Post(url,"application/json",post)' Q5 q  j, R' q+ v( _) i8 J! G
查看 netstat 似乎每个帖子都有一个新的连接,导致大量并发连接被打开。" I$ b6 K# i; Y, r* I8 m2 M
在这种情况下,重用连接的正确方法是什么?( @& D2 I9 h6 |/ D# j
                                                               
1 h& {1 x3 f" Q    解决方案:                                                               
6 j1 G2 X" \& K9 N- B" e  _                                                                确保您阅读直到响应完成并调用Close()。- ?! R9 T* C& f
例如
& }+ d1 M# ?! R$ d. n8 q
    res,_ := client.Do(req)io.Copy(ioutil.Discard,res.Body)res.Body.Close()7 @1 L1 }  d! `# s# A2 L/ Y
再次…为确保http.Client连接重用,请务必:
8 a7 a7 C' N9 e% B5 G7 J  p- {+ {读取直到响应完成ioutil.ReadAll(resp.Body))
! v# o. p3 i" Dcall Body.Close()
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则