Go http.Client の接続プーリングをオフにする
テスト時に HTTP/1.x リクエストごとに新しい TCP 接続を実現するには、 Go の HTTP クライアントの接続プーリング メカニズムを無効にすることが不可欠です。これは、クライアントに関連付けられた HTTP トランスポートを変更することで実現できます。
1 つの方法は、トランスポート内で DisableKeepAlives を true に設定することです。
t := http.DefaultTransport.(*http.Transport).Clone() t.DisableKeepAlives = true c := &http.Client{Transport: t}
このオプションは、キープアライブ接続を明示的に無効にします。クライアントはリクエストごとに新しい TCP 接続を確立する必要があります。ただし、Connection: close ヘッダーをリクエストに追加する場合があります。
または、MaxIdleConnsPerHost を負の値に設定すると、プーリングが事実上無効になります。
t := http.DefaultTransport.(*http.Transport).Clone() t.MaxIdleConnsPerHost = -1 c := &http.Client{Transport: t}
このオプションを使用すると、トランスポートは接続を追加しません
デフォルトのトランスポート構成を保持するには、これらの設定を保存する新しいトランスポートを作成することをお勧めします。
Dialer.KeepAlive を - に設定します。 1 は主にアクティブな接続のキープアライブ動作を制御するため、プーリングは無効になりません。一般的な想定に反して、このオプションは確立される TCP 接続の数には影響しません。
最後に、IdleConnTimeout を 1 * time.Nano Second などの非常に短い期間に設定すると、アイドル状態の接続を確実に閉じるのにも役立ちます。すぐに。ただし、潜在的な競合状態を避けるために、このアプローチは慎重に使用する必要があります。
以上が新しい TCP 接続のために Go の http.Client で接続プーリングを無効にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。