golang-net/http源码分析之http server
Posted 月牙寂道长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang-net/http源码分析之http server相关的知识,希望对你有一定的参考价值。
1 简介
先看下net/http库中的例子
创建一个http server,简单的几条语句就可以了。
其中的接口部分如下
2 路由
要理解http server那么就应该从路由开始。那么开始看源码
ServerMux则是一个http路由struct。里面的map包含了一个路由hash表。
另外上面的代码中,也形成了一个DefaultServeMux,默认的路由对象。
下面一个一个来做函数分析
2.1 Handle
这个函数为注册路由表函数,功能就是创建muxEntry,然后将其放入到路由map
2.2 HandleFunc
HandleFunc就是对Handle的封装
2.3 Handler
Handler则是根据request的访问路径,查找相关的路由表,得到处理函数
2.4 ServeHTTP
ServerHttp则是路由的入口
2.5 DefaultServeMux
默认路由,只是对DefaultServeMux的一层封装
3 Server
入口,创建并监听。
其实是创建了一个Server对象
看看server都提供哪些操作
下面我们跟踪过程
3.1 ListenAndServe
其中Listen返回的是一个Listener接口
3.2 Serve
真正的入口处
步骤:Accept–>srv.newConn–>c.serve(ctx)
4 conn
4.1 newConn
创建了一个conn
4.2 serve
conn里读取数据,然后进行处理
4.3 ServeHTTP
最终的地方。通过寻找路由,找到路由处理函数,然后对请求信息做响应处理。
5 总结
路由部分,构建map来存储路由处理函数
链接处理部分,构建一个tcp listener,然后accept,构建conn
然后通过conn,查找路由,找到处理函数,进行处理
龚浩华
qq 29185807 月牙寂-道长
2016年12月12日
以上是关于golang-net/http源码分析之http server的主要内容,如果未能解决你的问题,请参考以下文章