ホームページ  >  記事  >  バックエンド開発  >  新しい TCP 接続のために Go の http.Client で接続プーリングを無効にするにはどうすればよいですか?

新しい TCP 接続のために Go の http.Client で接続プーリングを無効にするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-07 17:17:03835ブラウズ

How can I Disable Connection Pooling in Go's http.Client for Fresh TCP Connections?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。