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!