2014-11-03 2 views
6

У меня есть трудное время, чтобы понять, в чем мы нуждаемся RoundTripper для Go.Go RoundTripper and Transport

https://golang.org/pkg/net/http/#RoundTripper

Объясняет по умолчанию Transport в Go:

var DefaultTransport RoundTripper = &Transport{ 
     Proxy: ProxyFromEnvironment, 
     Dial: (&net.Dialer{ 
       Timeout: 30 * time.Second, 
       KeepAlive: 30 * time.Second, 
     }).Dial, 
     TLSHandshakeTimeout: 10 * time.Second, 
} 

Но что будет разница между RoundTripper и это:

transport := &http.Transport{ 
    Proxy:     http.ProxyFromEnvironment, 
    TLSHandshakeTimeout: timeout, 
    Dial:    dialfunc, 
    DisableKeepAlives: true, 
} 

Мой вопрос: RoundTripper отличается от регулярного Transport ?

+1

Вы хотите знать, для чего нужен «RoundTripper» или вы хотите знать, почему «DefaultTransport» имеет тип «RoundTripper»? Потому что интерфейс «RoundTripper» существует для совершения круглых поездок. – nemo

+1

Я хочу знать, что такое RoundTripper –

+5

Из документации: «RoundTripper - это интерфейс, представляющий возможность выполнять одну транзакцию HTTP, получая ответ для данного запроса». Он находится между низкоуровневыми вещами, такими как набор номера, tcp и т. Д., А также подробные сведения о HTTP-адресах (перенаправления и т. Д.). RoundTrip - это * метод * делает одну обратную отправку запроса, отправленного на сервер, сервер отвечает с ответом , – Volker

ответ

5

Я думаю, что Волкер получил это право в своем комментарии к вашему вопросу. С моей точки зрения, http.Transport обеспечивает реализацию http.RoundTripper, но вы можете предоставить свой собственный, который совершенно другой, если он реализует RoundTrip().

Многие люди использовали это как способ ограничения скорости (т.е. они обеспечивают реализацию, которая может использовать http.Transport под обложками, но они добавляют возможность сдерживать скорость, с которой ваша программа отправляет или получает байты) ,

Смежные вопросы