打赏

go web执行流程

1.Web服务器的工作原理可以简单地归纳为:

客户机通过TCP/IP协议建立到服务器的TCP连接
客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端
客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果


2.go web执行过程:

首先调用Http.HandleFunc

(1.)按顺序做了几件事:

1 调用了DefaultServeMux的HandleFunc

2 调用了DefaultServeMux的Handle

3 往DefaultServeMux的map[string]muxEntry中增加对应的handler和路由规则

(2.)其次调用http.ListenAndServe(":9090", nil)

按顺序做了几件事情:

1 实例化Server

2 调用Server的ListenAndServe()

3 调用net.Listen("tcp", addr)监听端口

4 启动一个for循环,在循环体中Accept请求

5 对每个请求实例化一个Conn,并且开启一个goroutine为这个请求进行服务go c.serve()

6 读取每个请求的内容w, err := c.readRequest()

7 判断handler是否为空,如果没有设置handler(这个例子就没有设置handler),handler就设置为DefaultServeMux

8 调用handler的ServeHttp

9 在这个例子中,下面就进入到DefaultServeMux.ServeHttp

10 根据request选择handler,并且进入到这个handler的ServeHTTP

mux.handler(r).ServeHTTP(w, r)
11 选择handler:

A 判断是否有路由能满足这个request(循环遍历ServeMux的muxEntry)

B 如果有路由满足,调用这个路由handler的ServeHTTP

C 如果没有路由满足,调用NotFoundHandler的ServeHTTP

posted @ 2020-03-30 16:45  苍山落暮  阅读(315)  评论(0编辑  收藏  举报