Heim  >  Artikel  >  Backend-Entwicklung  >  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
Barbara StreisandOriginal
2024-11-09 21:07:02899Durchsuche

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
}

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
}

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!

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