ホームページ  >  記事  >  バックエンド開発  >  Go の http.Client の接続プーリングを効果的に無効にする方法は?

Go の http.Client の接続プーリングを効果的に無効にする方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-09 21:07:02924ブラウズ

How to Effectively Disable Connection Pooling for Go's http.Client?

Go http.Client の接続プーリングを無効にする

Go の HTTP クライアントでは、接続プーリングにより、同じリクエスト間の接続を効率的に再利用できます。ホスト。ただし、テスト目的では、HTTP/1.x リクエストごとに新しい TCP 接続を確立するために、接続プーリングを無効にする必要がある場合があります。

DisableKeepAlives または MaxIdleConnsPerHost の使用

接続通常、Transport.tryPutIdleConn のプールに追加されます。プーリングを無効にするには、Transport.DisableKeepAlives を true に設定するか、Transport.MaxIdleConnsPerHost を負の値に設定します。

func disableKeepAlive(c *http.Client) {
    t := c.Transport.(*http.Transport)
    t.DisableKeepAlives = true
}

func disableMaxIdle(c *http.Client) {
    t := c.Transport.(*http.Transport)
    t.MaxIdleConnsPerHost = -1
}

Dialer.KeepAlive の使用

初期の想定にもかかわらず、設定Dialer.KeepAlive オプションではプーリングは無効になりません。

競合状態の可能性

Transport.IdleConnTimeout を非常に短い期間 (1 ナノ秒など) に設定すると、「 Go 標準ライブラリの潜在的な競合状態による「tls: use of Closed connection」エラー。

推奨アプローチ

接続プーリングを確実に無効にするには、次のようにします。デフォルトのトランスポートを複製し、そのオプションを変更することをお勧めします:

func disablePooling(c *http.Client) {
    t := c.Transport.(*http.Transport).Clone()
    t.MaxIdleConnsPerHost = -1
    t.DisableKeepAlives = true
}

このアプローチにより、デフォルトを維持しながらさまざまなトランスポート オプションをカスタマイズできます。

以上がGo の http.Client の接続プーリングを効果的に無効にする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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