因爲使用go的自帶的net/http
庫並結合http代理使用時會遇到too many open files
和too many open connections
這樣的錯誤,致使沒法建立新的鏈接,其緣由是沒有釋放已用過的鏈接,本文只是用來總結解決這個問題的設置服務器
組裝http請求時設置訪問完成時自動關閉鏈接,這樣就不會讓服務器和客戶端一直保持鏈接,從而形成資源耗光了url
http_requ, _ := http.NewRequest(req.Method, dest_url, req.Body) http_requ.Header = req.Header //在頭部設置使用以後關閉鏈接 http_requ.Header.Set("Connection", "close") //或者直接設置Close http_requ.Close = true
其餘設置是看源代碼中的註釋瞎猜的代理
http_client := &http.Client{ Timeout: time.Duration(3 * time.Second),//客戶端設置3秒超時 }
http_client.Transport = &http.Transport{ DisableKeepAlives: false,//關閉鏈接複用,由於後臺鏈接過多最後會形成端口耗盡 MaxIdleConns: -1, //最大空閒鏈接數量 IdleConnTimeout: time.Duration(3 * time.Second), //空閒鏈接超時時間 Proxy: http.ProxyURL(proxy_addr), //設置http代理地址 }