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.
解決jdbc(jdbctemplate)在測試類時不報錯在TomCatb部署後報錯
3.
解決PyCharm GoLand IntelliJ 等 JetBrains 系列 IDE無法輸入中文
4.
vue+ant design中關於圖片請求不顯示的問題。
5.
insufficient memory && Native memory allocation (malloc) failed
6.
解決IDEA用Maven創建的Web工程不能創建Java Class文件的問題
7.
[已解決] Error: Cannot download ‘https://start.spring.io/starter.zip?
8.
在idea讓java文件夾正常使用
9.
Eclipse啓動提示「subversive connector discovery」
10.
帥某-技巧-快速轉帖博主文章(article_content)
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
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(二)
>>更多相關文章<<