2014-11-03 13 views
6

Tôi gặp khó khăn trong việc hiểu những gì chúng tôi cần RoundTripper cho trong Go.Đi RoundTripper và Giao thông vận tải

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

Giải thích mặc định Transport tại Gò:

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

Nhưng điều gì sẽ là sự khác biệt giữa RoundTripper và điều này:

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

Câu hỏi của tôi: là RoundTripper khác so với bình thường Transport ?

+1

Bạn có muốn biết 'RoundTripper' là gì hoặc bạn có muốn biết tại sao' DefaultTransport' có kiểu 'RoundTripper' không? Bởi vì giao diện 'RoundTripper' tồn tại để thực hiện các chuyến đi khứ hồi. – nemo

+1

Tôi muốn biết RoundTripper là gì –

+5

Từ tài liệu: "RoundTripper là một giao diện thể hiện khả năng thực hiện một giao dịch HTTP đơn lẻ, nhận được Phản hồi cho một Yêu cầu đã cho." Nó nằm giữa các công cụ cấp thấp như quay số, tcp, v.v ... và các chi tiết cấp cao của HTTP (chuyển hướng, vv) RoundTrip là * phương thức * thực hiện một chuyến đi một vòng yêu cầu được gửi đến máy chủ, trả lời máy chủ với phản hồi . – Volker

Trả lời

5

Tôi nghĩ Volker đã nhận được đúng trong nhận xét của anh về câu hỏi của bạn. Theo quan điểm của tôi, http.Transport cung cấp việc triển khai http.RoundTripper, nhưng bạn có thể cung cấp cho riêng mình hoàn toàn khác, miễn là nó triển khai RoundTrip().

Một số người đã sử dụng điều này làm cách thêm giới hạn tốc độ (nghĩa là họ cung cấp triển khai có thể sử dụng http.Transport dưới trang bìa, nhưng họ thêm khả năng hạn chế tốc độ mà chương trình của bạn gửi hoặc nhận byte) .

Các vấn đề liên quan