我目前正在努力寻找在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,这似乎导致每个帖子的新连接导致大量并发连接被打开.
在这种情况下重用连接的正确方法是什么?
我有一个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)