golang 长短连接处理
chenwenhao0304 · · 10334 次点击 · · 开始浏览前言
关于time_wait网上的介绍有很多,咱不啰嗦了,之前公司环境有台机器里有大量的time_wait,研究了下golang和http的基础,小结下。
http协议1.1后默认是长连接,如果一个client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。
Get / HTTP/1.1
Host: example.com
User-Agent: Go 1.1 package http
**Connection: close**
Accept-Encoding: gzip
HTTP/1.1 501 Not Implemented
Content-Type: text/html
Content-Length: 357
**Connection: close**
Date: Mon, 07 Mar 2016 13:15:56 GMT
Server: ECSF (iad/18D2)
golang里长短连接的一些处理
1)golang强制短连接
出了在请求的头里加上connection:close, 也可以设置request结构体Close成员变量为true,比如:
req, _ := http.NewRequest("Get", "http://example.com", nil)
req.Close = true
2)golang对长连接的要求
golang client不设置主动断连,还得注意下,想要保持长连接,得保证以下两个点
1. defer resp.Body.Close() //别忘了close body,不然长连接保持不了
2. body, err := ioutil.ReadAll(resp.Body)//记得读完resp.body或者放置一个结束符号 io.Copy(ioutil.Discard,resp.Body)
3) 解决产生大量close_wait
解决方案网上挺多,待总结个比较合适的方案,再补上
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
前言
关于time_wait网上的介绍有很多,咱不啰嗦了,之前公司环境有台机器里有大量的time_wait,研究了下golang和http的基础,小结下。
http协议1.1后默认是长连接,如果一个client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。
Get / HTTP/1.1
Host: example.com
User-Agent: Go 1.1 package http
**Connection: close**
Accept-Encoding: gzip
HTTP/1.1 501 Not Implemented
Content-Type: text/html
Content-Length: 357
**Connection: close**
Date: Mon, 07 Mar 2016 13:15:56 GMT
Server: ECSF (iad/18D2)
golang里长短连接的一些处理
1)golang强制短连接
出了在请求的头里加上connection:close, 也可以设置request结构体Close成员变量为true,比如:
req, _ := http.NewRequest("Get", "http://example.com", nil)
req.Close = true
2)golang对长连接的要求
golang client不设置主动断连,还得注意下,想要保持长连接,得保证以下两个点
1. defer resp.Body.Close() //别忘了close body,不然长连接保持不了
2. body, err := ioutil.ReadAll(resp.Body)//记得读完resp.body或者放置一个结束符号 io.Copy(ioutil.Discard,resp.Body)
3) 解决产生大量close_wait
解决方案网上挺多,待总结个比较合适的方案,再补上