一尘不染

在 Go 中重用 http 连接

javascript

我目前正在努力寻找一种在 Go 中制作 HTTP 帖子时重用连接的方法。

我已经创建了一个传输和客户端,如下所示:

// Create a new transport and HTTP client
tr := &http.Transport{}
client := &http.Client{Transport: tr}

然后我将此客户端指针传递到一个 goroutine 中,该 goroutine 将多个帖子发送到同一个端点,如下所示:

r, err := client.Post(url, "application/json", post)

查看 netstat 这似乎导致每个帖子都有一个新连接,从而导致大量并发连接被打开。

在这种情况下重用连接的正确方法是什么?


阅读 184

收藏
2021-12-08

共1个答案

一尘不染

确保您阅读直到响应完成并调用Close()

例如

res, _ := client.Do(req)
io.Copy(ioutil.Discard, res.Body)
res.Body.Close()

再次…为确保http.Client连接重用,请务必:

  • 读取直到响应完成(即ioutil.ReadAll(resp.Body)
  • call Body.Close()
2021-12-08