Heim > Backend-Entwicklung > Golang > Wie kann ich das Verbindungspooling für den http.Client von Go effektiv deaktivieren?

Wie kann ich das Verbindungspooling für den http.Client von Go effektiv deaktivieren?

Barbara Streisand
Freigeben: 2024-11-09 21:07:02
Original
961 Leute haben es durchsucht

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

Verbindungspooling für Go http.Client deaktivieren

Im HTTP-Client von Go ermöglicht Verbindungspooling eine effiziente Wiederverwendung von Verbindungen zwischen Anfragen an denselben Gastgeber. Zu Testzwecken kann es jedoch erforderlich sein, das Verbindungspooling zu deaktivieren, um für jede HTTP/1.x-Anfrage eine neue TCP-Verbindung herzustellen.

Verwenden von DisableKeepAlives oder MaxIdleConnsPerHost

Verbindungen werden normalerweise einem Pool in Transport.tryPutIdleConn hinzugefügt. Um das Pooling zu deaktivieren, setzen Sie entweder Transport.DisableKeepAlives auf true oder Transport.MaxIdleConnsPerHost auf einen negativen Wert:

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
}
Nach dem Login kopieren

Using Dialer.KeepAlive

Trotz anfänglicher Annahmen, Einstellung Die Option Dialer.KeepAlive deaktiviert das Pooling nicht.

Mögliche Race Condition

Das Festlegen von Transport.IdleConnTimeout auf eine sehr kurze Dauer (z. B. 1 Nanosekunde) kann zu „ tls: Fehler bei der Verwendung geschlossener Verbindungen aufgrund einer möglichen Race-Bedingung in der Go-Standardbibliothek.

Empfohlener Ansatz

Um sicherzustellen, dass das Verbindungspooling deaktiviert ist, ist dies der Fall Es wird empfohlen, den Standardtransport zu klonen und seine Optionen zu ändern:

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

Dieser Ansatz ermöglicht die Anpassung verschiedener Transportoptionen unter Beibehaltung der Standardeinstellungen.

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage