golang_遇到的坑
net/http长连接
//原代码 resp, err := http.Post(url, "application/json", dataReader, ) server出现大量establish的链接无法释放。 查询发现是由于golang的http的长连接问题。
var (
POST_REMOTE_TIMEOUT = 30
)
func dialTimeout(network, addr string) (net.Conn, error) {
return net.DialTimeout(network, addr, time.Second*time.Duration(POST_REMOTE_TIMEOUT))
}
transport := http.Transport{
Dial: dialTimeout,
DisableKeepAlives: true,
}
client := http.Client{
Transport: &transport,
}
resp, err := client.Post(url,
"application/json",
dataReader,
)
添加DisableKeepAlives true,此时server端出现大量close_wait状态。此为server端发送fin包后的状态。
transport := http.Transport{
//Dial: dialTimeout,
DisableKeepAlives: true,
}
client := http.Client{
Transport: &transport,
}
resp, err := client.Post(url,
"application/json",
dataReader,
)
resp.Body.Close()


浙公网安备 33010602011771号