golang 长短连接处理_wenhao的专栏-CSDN博客 - 图1

浩闻城 2016-03-07 21:53:30 golang 长短连接处理_wenhao的专栏-CSDN博客 - 图2
6071 golang 长短连接处理_wenhao的专栏-CSDN博客 - 图3
收藏 3

最后发布: 2016-03-07 21:53:30 首次发布: 2016-03-07 21:53:30

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

前言

关于 time_wait 网上的介绍有很多, 咱不啰嗦了,之前公司环境有台机器里有大量的 time_wait, 研究了下 golang 和 http 的基础,小结下。

http 协议 1.1 后默认是长连接,如果一个 client 使用 http1.1 协议,但又不希望使用长链接,则需要在 header 中指明 connection 的值为 close;如果 server 方也不想支持长链接,则在 response 中也需要明确说明 connection 的值为 close。

  1. Get / HTTP/1.1
  2. Host: example.com
  3. User-Agent: Go 1.1 package http
  4. **Connection: close**
  5. Accept-Encoding: gzip
  6. HTTP/1.1 501 Not Implemented
  7. Content-Type: text/html
  8. Content-Length: 357
  9. **Connection: close**
  10. Date: Mon, 07 Mar 2016 13:15:56 GMT
  11. Server: ECSF (iad/18D2)

golang 里长短连接的一些处理

1)golang 强制短连接

出了在请求的头里加上connection:close, 也可以设置request结构体Close成员变量为true,比如:

  1. req, _ := http.NewRequest("Get", "http://example.com", nil)
  2. req.Close = true

2)golang对长连接的要求

golang client不设置主动断连,还得注意下,想要保持长连接,得保证以下两个点

  1. 1. defer resp.Body.Close() //别忘了close body,不然长连接保持不了
  1. 2. body, err := ioutil.ReadAll(resp.Body)//记得读完resp.body或者放置一个结束符号 io.Copy(ioutil.Discard,resp.Body)

3) 解决产生大量close_wait

解决方案网上挺多,待总结个比较合适的方案,再补上 https://blog.csdn.net/chenwenhao0304/article/details/50822687 ```