golang 长短连接处理
2016-03-07 21:53
399 查看
前言
关于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 语言 Channel 实现原理精要
- Go语言将支持Android
- Golang实现的聊天程序服务端和客户端代码分享
- Golang学习笔记(三):控制流
- Golang学习笔记(二):类型、变量、常量
- Golang中的sync.WaitGroup用法实例
- Go语言struct类型介绍
- golang使用正则表达式解析网页
- Golang极简入门教程(三):并发支持
- 基于JAVA中Jersey处理Http协议中的Multipart的详解
- PHP中Http协议post请求参数
- Golang极简入门教程(四):编写第一个项目
- Golang记录、计算函数执行耗时、运行时间的一个简单方法
- 深入解析Go语言中for循环的写法
- Golang学习笔记(四):array、slice、map
- 理解Golang中的数组(array)、切片(slice)和map
- golang语言中for循环语句用法实例
- Golang学习笔记(一):简介
- golang操作mongodb的方法
- GO语言(golang)基础知识