初学Golang:web 请求的处理流程
?
http.ListenAndServe()的接收請求,輸出響應的流程如下:-
首先調用Http.HandleFunc
按順序做了幾件事:
1 調用了DefaultServeMux的HandleFunc
2 調用了DefaultServeMux的Handle
3 往DefaultServeMux的map[string]muxEntry中增加對應的handler和路由規則
-
其次調用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(循環遍歷ServerMux的muxEntry)
B 如果有路由滿足,調用這個路由handler的ServeHttp
C 如果沒有路由滿足,調用NotFoundHandler的ServeHttp
大概流程圖如下:
原文:astaxie/build-web-application-with-golang
總結
以上是生活随笔為你收集整理的初学Golang:web 请求的处理流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql5.5以上my.ini中设置字
- 下一篇: 如何在本地搭建多个网站(wampserv