Go1.9不使用http2提高http传输效率
2017-09-30 13:07
459 查看
内部应用对外提供httpAPI,QPS提不上去,于是对接口进行了改造,将短链接改成长连接,在长连接上做数据交互.QPS有了显著提高,代码片段.内部实现是自定义解析http的,类似于fasthttp的方法,需要时解析,这里是用标准库的方法做的小实例
package main import ( "bufio" "io" "log" "net" "net/http" "os" "os/signal" "time" ) func main() { lis, err := net.Listen("tcp", ":1789") if err != nil { log.Fatalf("Listen port error:%s\n", err.Error()) } var ( sigChan = make(chan os.Signal, 1) ) signal.Notify(sigChan, os.Interrupt, os.Kill) go func() { <-sigChan lis.Close() }() server(lis) } func server(lis net.Listener) { for { conn, err := lis.Accept() if err != nil { opt, ok := err.(*net.OpError) if ok { if opt.Err.Error() == "use of closed network connection" { return } } //在这里可以控制错误时等待时间 log.Println(err.Error()) continue } //写时候要加锁,这里不做实现 go handler(conn) } } func handler(conn net.Conn) { buf := bufio.NewReader(conn) for { req, err := http.ReadRequest(buf) if err != nil { log.Printf("Read requst error:%s\n", err.Error()) break } go handler_req(conn, req) } conn.Close() } func handler_req(w io.Writer, req *http.Request) { log.Printf("Remoteddr:%s URI:%s\n", req.RemoteAddr, req.RequestURI) resp := NewRespnse(req) resp.Write(w) } func NewRespnse(req *http.Request) *http.Response { resp := &http.Response{Request: req, ProtoMajor: 1, ProtoMinor: 1, StatusCode: http.StatusOK, Header: make(http.Header), ContentLength: 0} resp.Header.Set("Server", "secrecy") resp.Header.Set("Connection", "keep-alive") resp.Header.Set("Content-Type", "text/html;charset=utf-8") resp.Header.Set("Date", time.Now().String()) return resp }
相关文章推荐
- HTTP第二篇【HTTP方法、不保存状态、提高传输效率】
- 让浏览器提高缓存效率,使用HTTP_IF_MODIFIED_SINCE缓存提高PHPWEB性能
- 总结经常使用可以提高工作效率的工具集
- Win7系统定制自己的快速运行程序方式提高电脑使用效率
- 使用VS2005搭建典型高效的SharePoint开发环境,提高生产效率,包含远程调试,自动部署
- http缓存提高效率
- GO语言学习:使用io.copyN实现网络文件传输
- C#使用Socket与HTTP连接服务器传输数据包
- Go语言的http/2服务器功能及客户端使用
- 使用WITH提高查询效率
- oracle使用with as提高查询效率
- Hadoop 使用Combiner提高Map/Reduce程序效率
- 使用开源框架android-async-http-1.4.8.jar与服务器传输数据
- 使用参数化和块语句来提高批处理SQL语句的执行效率
- 使用supervisor提高nodejs调试效率
- 如何使用SSE指令提高FIR算法效率
- LLdb篇2教你使用faceBook的chisel来提高调试效率
- 使用Fiddler提高前端工作效率 (介绍篇)
- 使用EditPlus技巧,提高工作效率(自动完成文件、语法文件下载)
- 线上操作使用tmux提高工作效率