2014-11-03 22 views
6

Gitmek için neye ihtiyacımız olduğunu anlamak için zor anlar yaşıyorum RoundTripper. Git RoundTripper ve Aktarım

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

Git varsayılan Transport açıklar:

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

Ama ne RoundTripper ve bu arasındaki fark olacaktır:

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

Sorum: Transport düzenli daha RoundTripper farklıdır ?

+1

RoundTripper öğesinin ne için olduğunu bilmek istiyor musunuz veya "DefaultTransport" neden "RoundTripper" türüne sahip olduğunu öğrenmek ister misiniz? Çünkü 'RoundTripper' arayüzü yuvarlak turlar yapmak için var. – nemo

+1

RoundTripper öğesinin ne olduğunu bilmek istiyorum –

+5

Dokümantasyondan: "RoundTripper, belirli bir İstek için Yanıt alınıp tek bir HTTP işlemini yürütme yeteneğini temsil eden bir arabirimdir." Çevirme, tcp, vb. Gibi düşük düzeyli şeyler ile HTTP'nin yüksek düzeydeki detayları (yönlendirmeler, vb.) Arasında yer alır. RoundTrip * * * yöntem, sunucuya gönderilen isteklerin tek bir gidişatını, sunucu yanıtlarını yanıt olarak yapar. . – Volker

cevap

5

Sanırım Volker, sorunuza dair yorumunda haklı çıktı. Benim bakış açımdan, http.Transport, http.RoundTripper'un bir uygulamasını sağlar, ancak RoundTrip()'u uyguladığı sürece tamamen farklı olanı kendinize sağlayabilirsiniz.

Bazı kişiler, oran sınırlama eklemenin bir yolu olarak kullanmışlardır (ör., Kapağın altında http.Transport kullanabilen bir uygulama sağlarlar, ancak programınızın baytları gönderdiği veya aldığı hızı sınırlama yeteneği eklerler) .

İlgili konular