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