3 回答

TA貢獻1878條經驗 獲得超4個贊
該消息connection reset by peer
表明遠程服務器發送了一個RST
強制關閉連接,或者是故意作為限制連接的機制,或者是由于缺乏資源。無論哪種方式,您都可能打開太多連接,或者重新連接太快。
并行啟動 1000-2000 個連接很少是下載這么多頁面的最有效方式,尤其是當大部分或全部來自單個服務器時。如果您測試吞吐量,您會發現最佳并發級別要低得多。
您還需要設置Transport.MaxIdleConnsPerHost
以匹配您的并發級別。如果MaxIdleConnsPerHost
低于預期的并發連接數,服務器連接通常會在請求后關閉,然后立即再次打開——這將顯著減慢您的進度,并可能達到服務器施加的連接限制。

TA貢獻1802條經驗 獲得超5個贊
仍然是一個golang新手,希望這會有所幫助。
var netClient = &http.Client{}
func init() {
tr := &http.Transport{
MaxIdleConns: 20,
MaxIdleConnsPerHost: 20,
}
netClient = &http.Client{Transport: tr}
}
func foo() {
resp, err := netClient.Get("http://www.example.com/")
}

TA貢獻1810條經驗 獲得超5個贊
MaxConnsPerHost通過設置運輸選項,我得到了很好的結果......
cl := &http.Client{
Transport: &http.Transport{MaxConnsPerHost: 50}
}
MaxConnsPerHost 可以選擇限制每個主機的連接總數,包括處于撥號、活動和空閑狀態的連接。違反限制時,撥號將阻塞。
https://golang.org/pkg/net/http/#Transport.MaxConnsPerHost
編輯:為了澄清,這個選項是在 Go 1.11 中發布的,在上面@AG1 或@JimB 的答案時不可用,因此我發布了這個。
- 3 回答
- 0 關注
- 215 瀏覽
添加回答
舉報