Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich das Verbindungspooling im http.Client von Go für neue TCP-Verbindungen deaktivieren?

Wie kann ich das Verbindungspooling im http.Client von Go für neue TCP-Verbindungen deaktivieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-07 17:17:03833Durchsuche

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

Verbindungspooling für Go http.Client deaktivieren

Um beim Testen für jede HTTP/1.x-Anfrage eine neue TCP-Verbindung herzustellen, Das Deaktivieren des Verbindungspooling-Mechanismus im HTTP-Client von Go ist unbedingt erforderlich. Dies kann durch Ändern des mit dem Client verbundenen HTTP-Transports erreicht werden.

Ein Ansatz besteht darin, DisableKeepAlives innerhalb des Transports auf „true“ zu setzen:

t := http.DefaultTransport.(*http.Transport).Clone()
t.DisableKeepAlives = true
c := &http.Client{Transport: t}

Diese Option deaktiviert explizit Keep-Alive-Verbindungen. Dadurch wird der Client gezwungen, für jede Anfrage eine neue TCP-Verbindung herzustellen. Es kann jedoch sein, dass Anfragen einen Connection: close-Header hinzugefügt werden.

Alternativ wird das Pooling effektiv deaktiviert, wenn MaxIdleConnsPerHost auf einen negativen Wert gesetzt wird:

t := http.DefaultTransport.(*http.Transport).Clone()
t.MaxIdleConnsPerHost = -1
c := &http.Client{Transport: t}

Mit dieser Option fügt der Transport niemals Verbindungen hinzu zum Pool, um sicherzustellen, dass für jede Anfrage eine neue Verbindung hergestellt wird.

Es wird empfohlen, einen neuen Transport zum Speichern dieser Einstellungen zu erstellen, um die Standardtransportkonfiguration beizubehalten.

Dialer.KeepAlive auf - setzen 1 deaktiviert das Pooling nicht, da es hauptsächlich das Keep-Alive-Verhalten für aktive Verbindungen steuert. Entgegen allgemeiner Annahmen hat diese Option keinen Einfluss auf die Anzahl der hergestellten TCP-Verbindungen.

Schließlich kann das Festlegen von IdleConnTimeout auf eine sehr kurze Dauer, z. B. 1 * time.Nanosekunde, auch dazu beitragen, sicherzustellen, dass inaktive Verbindungen geschlossen werden sofort. Dieser Ansatz sollte jedoch mit Vorsicht angewendet werden, um potenzielle Rennbedingungen zu vermeiden.

Das obige ist der detaillierte Inhalt vonWie kann ich das Verbindungspooling im http.Client von Go für neue TCP-Verbindungen deaktivieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn