相关疑难解决方法(0)

在Golang中重用http连接

我目前正在努力寻找在Golang中发布HTTP帖子时重用连接的方法.

我创建了一个像这样的传输和客户端:

// Create a new transport and HTTP client
tr := &http.Transport{}
client := &http.Client{Transport: tr}
Run Code Online (Sandbox Code Playgroud)

然后我将这个客户端指针传递给一个goroutine,它会向同一个端点发送多个帖子,如下所示:

r, err := client.Post(url, "application/json", post)
Run Code Online (Sandbox Code Playgroud)

查看netstat,这似乎导致每个帖子的新连接导致大量并发连接被打开.

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

go

65
推荐指数
5
解决办法
6万
查看次数

为什么Go HTTPS Client不重用连接?

我有一个http客户端,它创建了与主机的多个连接.我想设置它可以设置到特定主机的最大连接数.在go的请求中没有这样的选项.Transport.我的代码看起来像

package main 

import (
  "fmt"
  "net/http"
  "net/url"
)

const (
  endpoint_url_fmt      = "https://blah.com/api1?%s"
)


func main() {

  transport := http.Transport{ DisableKeepAlives : false }

  outParams := url.Values{}
  outParams.Set("method", "write")
  outParams.Set("message", "BLAH")

  for {
    // Encode as part of URI.
    outboundRequest, err := http.NewRequest(
      "GET",
      fmt.Sprintf(endpoint_url_fmt, outParams.Encode()),
      nil
    )
    outboundRequest.Close = false
    _ , err = transport.RoundTrip(outboundRequest)
    if err != nil {
      fmt.Println(err)
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

我希望这可以创建1个连接.因为我在for循环中调用它.但这会不断创建无限数量的连接.

使用请求库的类似python代码只创建一个连接.

#!/usr/bin/env python
import requests
endpoint_url_fmt      = "https://something.com/restserver.php"
params = {}
params['method'] = …
Run Code Online (Sandbox Code Playgroud)

http go

9
推荐指数
1
解决办法
4464
查看次数

标签 统计

go ×2

http ×1