2014-11-03 13 views
6

Ich habe schwer zu verstehen, was wir brauchen RoundTripper für in Go.Go RoundTripper und Transport

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

Erklärt den Standard Transport in Go:

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

Aber was ist der Unterschied zwischen RoundTripper wäre und dies:

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

Meine Frage: ist RoundTripper anders als normale Transport ?

+1

Möchten Sie wissen, wofür 'RoundTripper' ist oder wollen Sie wissen, warum' DefaultTransport' den Typ 'RoundTripper' hat? Weil die Schnittstelle 'RoundTripper' existiert, um Rundreisen zu machen. – nemo

+1

Ich möchte wissen, was RoundTripper ist –

+5

Aus der Dokumentation: "RoundTripper ist eine Schnittstelle, die die Möglichkeit darstellt, eine einzelne HTTP-Transaktion auszuführen, um die Antwort für eine bestimmte Anfrage zu erhalten." Es befindet sich zwischen den Low-Level-Sachen wie Wählen, Tcp usw. und den High-Level-Details von HTTP (Weiterleitungen, etc.) RoundTrip ist * die * Methode tun einen einzigen Umlauf der Anfrage an den Server, Server antwortet mit Antwort gesendet . – Volker

Antwort

5

Ich glaube, Volker hat es in seinem Kommentar zu Ihrer Frage richtig verstanden. Aus meiner Sicht bietet http.Transport eine Implementierung von http.RoundTripper, aber Sie können Ihre eigenen, die komplett anders ist, solange es implementiert RoundTrip() implementiert.

Eine Reihe von Leuten haben dies als die Möglichkeit verwendet, um die Rate zu begrenzen (dh sie bieten eine Implementierung, die http.Transport unter den Deckeln verwenden kann, aber sie fügen die Möglichkeit hinzu, die Rate zu begrenzen, mit der Ihr Programm Bytes sendet oder empfängt) .