2 个回答
有关闭,不关闭会程序可能会消耗完 socket 描述符。有如下2种关闭方式:
直接设置请求变量的 Close 字段值为 true,每次请求结束后就会主动关闭连接。设置 Header 请求头部选项 Connection: close,然后服务器返回的响应头部也会有这个选项,此时 HTTP 标准库会主动断开连接
直接设置请求变量的 Close 字段值为 true,每次请求结束后就会主动关闭连接。设置 Header 请求头部选项 Connection: close,然后服务器返回的响应头部也会有这个选项,此时 HTTP 标准库会主动断开连接
// 主动关闭连接
func main() {
req, err := http.NewRequest("GET", "http://golang.org", nil)
checkError(err)
req.Close = true
//req.Header.Add("Connection", "close") // 等效的关闭方式
resp, err := http.DefaultClient.Do(req)
if resp != nil {
defer resp.Body.Close()
}
checkError(err)
body, err := ioutil.ReadAll(resp.Body)
checkError(err)
fmt.Println(string(body))
}
发布于:5个月前 (11-29) IP属地:四川省
第二种:你可以创建一个自定义配置的 HTTP transport 客户端,用来取消 HTTP 全局的复用连接。
func main() {
tr := http.Transport{DisableKeepAlives: true}
client := http.Client{Transport: &tr}
resp, err := client.Get("https://golang.google.cn/")
if resp != nil {
defer resp.Body.Close()
}
checkError(err)
fmt.Println(resp.StatusCode) // 200
body, err := ioutil.ReadAll(resp.Body)
checkError(err)
fmt.Println(len(string(body)))
}
发布于:5个月前 (11-29) IP属地:四川省
我来回答
您需要 登录 后回答此问题!