Как работает net/http Transport?

Middle+
735 просмотров
AFK Offer AI

http.Transport — нижний уровень HTTP-клиента в Go. Он управляет пулом соединений, TLS, прокси, таймаутами на уровне соединения. Когда ты делаешь http.Get(), под капотом работает DefaultTransport.

transport := &http.Transport{
    MaxIdleConns:        100,
    MaxIdleConnsPerHost: 10,
    IdleConnTimeout:     90 * time.Second,
    TLSHandshakeTimeout: 10 * time.Second,
}
client := &http.Client{
    Transport: transport,
    Timeout:   30 * time.Second,
}

Transport переиспользует TCP-соединения (keep-alive) — это критично для производительности. Если не читать Body до конца и не закрывать его, соединение не вернётся в пул и будет утечка. MaxIdleConnsPerHost по умолчанию 2, что мало для высоконагруженных сервисов — увеличивай. Transport потокобезопасен и должен быть один на приложение, а не создаваться на каждый запрос.

Следующий вопрос

Что такое паттерн Strategy?