golang-net/http源码分析之http server

Posted 月牙寂道长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang-net/http源码分析之http server相关的知识,希望对你有一定的参考价值。

1 简介

先看下net/http库中的例子

创建一个http server,简单的几条语句就可以了。

其中的接口部分如下

golang-net/http源码分析之http server

2 路由

要理解http server那么就应该从路由开始。那么开始看源码

golang-net/http源码分析之http server

ServerMux则是一个http路由struct。里面的map包含了一个路由hash表。

另外上面的代码中,也形成了一个DefaultServeMux,默认的路由对象。

golang-net/http源码分析之http server

下面一个一个来做函数分析

2.1 Handle

golang-net/http源码分析之http server

这个函数为注册路由表函数,功能就是创建muxEntry,然后将其放入到路由map

golang-net/http源码分析之http server

golang-net/http源码分析之http server

2.2 HandleFunc

HandleFunc就是对Handle的封装

golang-net/http源码分析之http server

2.3 Handler

Handler则是根据request的访问路径,查找相关的路由表,得到处理函数

golang-net/http源码分析之http server

2.4 ServeHTTP

ServerHttp则是路由的入口

golang-net/http源码分析之http server


2.5 DefaultServeMux

默认路由,只是对DefaultServeMux的一层封装

golang-net/http源码分析之http server

3 Server

入口,创建并监听。

其实是创建了一个Server对象

golang-net/http源码分析之http server

看看server都提供哪些操作

golang-net/http源码分析之http server

下面我们跟踪过程

3.1 ListenAndServe

golang-net/http源码分析之http server


其中Listen返回的是一个Listener接口

golang-net/http源码分析之http server

3.2 Serve

真正的入口处

步骤:Accept–>srv.newConn–>c.serve(ctx)


golang-net/http源码分析之http server

4 conn

4.1 newConn

创建了一个conn

golang-net/http源码分析之http server


4.2 serve

conn里读取数据,然后进行处理

golang-net/http源码分析之http server


4.3 ServeHTTP

最终的地方。通过寻找路由,找到路由处理函数,然后对请求信息做响应处理。

5 总结

  • 路由部分,构建map来存储路由处理函数

  • 链接处理部分,构建一个tcp listener,然后accept,构建conn

  • 然后通过conn,查找路由,找到处理函数,进行处理

龚浩华 
qq 29185807 月牙寂-道长 
2016年12月12日 



以上是关于golang-net/http源码分析之http server的主要内容,如果未能解决你的问题,请参考以下文章

Fasthttp源码分析之http server源码分析

muduo源码分析之HttpServer

《OkHttp源码分析》之 Http请求原理

Jmeter源码之HTTP Request Sampler分析

Elasticsearch源码分析-架构设计之Action

流量回放工具之GoReplay output-http 源码分析