回答

收藏

在 Go 中重用 http 连接

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

目前正在努力寻找 Go 中制作 HTTP 帖子时重用连接法。
( T$ ]# R: u8 @7 u1 X; X我创建了传输和客户端,如下所示:. b7 ^2 h( `) J4 u# y# S
    // Create a new transport and HTTP clienttr := &http.Transport{}client := &http.Client{Transport: tr}; `. |. t- @' \+ r
然后我把这个客户端指针传递给 goroutine 中,该 goroutine 将多个帖子发送到同一端点,如下所示:
* j0 S' Y1 B* ^7 P# H
    r,err := client.Post(url,"application/json",post)
    , d. M, }  _# j7 T* ^' L! z
查看 netstat 似乎每个帖子都有一个新的连接,导致大量并发连接被打开。
- F4 u5 W5 p+ X' `在这种情况下,重用连接的正确方法是什么?
& s$ J/ ^9 _( j                                                               
* @7 L8 o" |& u% ^6 l    解决方案:                                                                  I  ]: j9 ~# o5 H$ O, Z6 `
                                                                确保您阅读直到响应完成并调用Close()。
& _* @- ?* T' J) Q8 H. n% l, b例如
' W3 x8 b" k$ O& w; X, n* D; ]+ [
    res,_ := client.Do(req)io.Copy(ioutil.Discard,res.Body)res.Body.Close()# u+ H* {" }8 I. O! n
再次…为确保http.Client连接重用,请务必:
" j" u$ Y+ Y1 G+ Z读取直到响应完成ioutil.ReadAll(resp.Body))0 d( C2 B9 N0 U, h5 S
call Body.Close()
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则