JavaShuo
欄目
標籤
深刻理解gin framework(二)
時間 2019-12-06
標籤
深刻
理解
gin
framework
简体版
原文
原文鏈接
gin flow 分析
Handler是如何註冊和傳遞的?路由是如何解析的?http方法又是如何處理,使其知足RESTful規範的?這些細節都須要深刻到代碼層面來分析
輔助功能
既然是框架,天然會處理各類項目中共性的問題,好比說404 Not Found。這部分框架的功能不是分析的重點。
啓動http服務
在
深刻理解gin framework(一)
的例子中,由r.Run(":14000")啓動http服務。這裏只能傳入空值或者一個地址,不然會報錯。源碼以下,空值時默認端口爲8080.
啓動http server的Run函數,TLS類似,只不過是加了個證書。其實仍是把address傳給官方標準包http的ListenAndServe函數,此處的engine struct只須要實現Handler接口,也就是實現ServeHTTP函數便可。
engine struct中的pool就是sync.Pool,代碼中能夠看出來,每處理一個http請求,都會從鏈接池裏邊取出一個Context,把請求參數傳遞給這個Context,處理完以後,再把這個Context放回去。
處理http請求
從上邊的源碼能夠看出來,全部的http請求都會走到handleHTTPRequest函數中去處理。
handleHTTPRequest處理的第一步是初始化Context的參數,前面有說到,Context結構體封裝了處理http請求的全部數據。初始化參數就是將Context裏面的數據更新爲這次http請求的數據,方便接下來對Context進行處理。
想要理解接下來handleHTTPRequest的處理邏輯,須要先岔開到tree.go文件當中去。
git
肯定某次http請求怎麼處理,須要明確審什麼?三件事情,path,method,handler!
在tree文件當中,以基數樹的結構存儲了path,及其該path對應的handler。
當新的http請求過來的時候,調用getValue就能夠找到對應path的handler。爲何沒有對應的get,post方法呢?由於每一個http方法本身一棵樹~
OK。回到handleHTTPRequest函數中來。找到handler以後,把Context交給這個handler就好了,handler爲何可以處理Context呢?是由於這個:
番外:註冊handler
回到咱們的
例子
。
gin.Default()返回了一個Engine,這個engine繼承了RouteGroup,而RouteGroup實現了IRouter接口(Get(),Post()...),因此r.Group("/api")其實調用的是RouteGroup函數
在Group裏邊會整合handlers,計算並記錄絕對路徑。分組以後返回RouteGroup對象,此時,繼續調用POST()函數,將handlerFunc和路徑註冊到對應的tree當中。具體以下:
至此,會生成POST方法對應的tree,當有POST請求進入服務器時,找到POST tree,而後根據path找到對應的handler。再把已經初始化的Context交給相應的handler來處理。
相關文章
1.
深刻理解gin framework(一)
2.
深刻Gin框架內幕(二)
3.
Titan Framework MongoDB深刻理解1
4.
Titan Framework MongoDB深刻理解3
5.
Titan Framework MongoDB深刻理解2
6.
深刻解析Android-Plugin-Framework
7.
深刻理解MyBatis(二)--Mapper
8.
深刻理解TCP(二)
9.
linux uvc深刻理解(二)
10.
深刻理解RunLoop(二)
更多相關文章...
•
Hibernate的二級緩存
-
Hibernate教程
•
SQLite Explain(解釋)
-
SQLite教程
•
算法總結-深度優先算法
•
Docker 清理命令
相關標籤/搜索
深刻理解JVM
深刻理解javascript
深刻理解webpack
深刻理解redis
深刻理解ES6
深刻理解 RPC
深刻理解RocketMQ
深刻理解Spark
深刻理解RPC
深刻理解Nginx
MySQL教程
MyBatis教程
NoSQL教程
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
深度學習硬件架構簡述
2.
重溫矩陣(V) 主成份分析
3.
國慶佳節第四天,談談我月收入增加 4K 的故事
4.
一起學nRF51xx 23 - s130藍牙API介紹
5.
2018最爲緊缺的十大崗位,技術崗佔80%
6.
第一次hibernate
7.
SSM項目後期添加數據權限設計
8.
人機交互期末複習
9.
現在無法開始異步操作。異步操作只能在異步處理程序或模塊中開始,或在頁生存期中的特定事件過程中開始...
10.
微信小程序開發常用元素總結1-1
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
深刻理解gin framework(一)
2.
深刻Gin框架內幕(二)
3.
Titan Framework MongoDB深刻理解1
4.
Titan Framework MongoDB深刻理解3
5.
Titan Framework MongoDB深刻理解2
6.
深刻解析Android-Plugin-Framework
7.
深刻理解MyBatis(二)--Mapper
8.
深刻理解TCP(二)
9.
linux uvc深刻理解(二)
10.
深刻理解RunLoop(二)
>>更多相關文章<<