ホストへの複数の接続を作成する http クライアントがあります。特定のホストに設定できる最大接続数を設定したい。go の request.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)
}
}
}
これにより、1つの接続が作成されると予想されます。forループで呼び出しているので。しかし、これは無限の数の接続を作成し続けます。
requests ライブラリを使用する同様の python コードは、1 つの接続のみを作成します。
#!/usr/bin/env python
import requests
endpoint_url_fmt = "https://something.com/restserver.php"
params = {}
params['method'] = 'write'
params['category'] = category_errors_scuba
params['message'] = "blah"
while True:
r = requests.get(endpoint_url_fmt, params = params)
何らかの理由で、go コードが http 接続を再利用していません。
EDIT : go コードでは、接続を再利用するために本体を閉じる必要があります。
resp , err = transport.RoundTrip(outboundRequest)
resp.Close() // This allows the connection to be reused