golang_遇到的坑

net/http长连接

//原代码

resp, err := http.Post(url,
		"application/json",
		dataReader,
	)

server出现大量establish的链接无法释放。

查询发现是由于golang的http的长连接问题。
http长连接导致server出现大量establish的链接无法释放
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包后的状态。
添加DisableKeepAlives true,此时server端出现大量close_wait状态
	transport := http.Transport{
		//Dial:              dialTimeout,
		DisableKeepAlives: true,
	}
	
	client := http.Client{
		Transport: &transport,
	}

	resp, err := client.Post(url,
		"application/json",
		dataReader,
	)
	resp.Body.Close()
再加一个resp.Body.Close(),解决问题,连接回复正常

 

posted @ 2019-03-15 02:19  fat39  阅读(430)  评论(0)    收藏  举报