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.
springboot在一个项目中启动多个核心启动类
2.
Spring Boot日志-3 ------>SLF4J与别的框架整合
3.
SpringMVC-Maven(一)
4.
idea全局设置
5.
将word选择题转换成Excel
6.
myeclipse工程中library 和 web-inf下lib的区别
7.
Java入门——第一个Hello Word
8.
在chrome安装vue devtools(以及安装过程中出现的错误)
9.
Jacob线上部署及多项目部署问题处理
10.
1.初识nginx
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
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(二)
>>更多相关文章<<