go iris 源码思路分析

2 篇文章 0 订阅

app init

进入
app := iris.New()
app.Run(iris.Addr("0.0.0.0:8080"))

iris.go
核心是初始化了Router 和ContextPool
在这里插入图片描述

iris.go
在run函数里首先进行了app.build, 然后进行配置,最后调用传入的参数函数, 核心是
app.build()
iris.Addr(":8080")(app)
在这里插入图片描述

iris.go
app.build 核心是app.Router.BuildRouter(), 传入了默认requestHandller
在这里插入图片描述

iris.go
iris.Addr(":8080")(app) 核心是
NewHost()
ListenAndServer()
iris.go

iris.go net/http/server.go net/http/server.go
NewHost()核心是
srv.Handler = app.Router
现在整体思路就很清晰了,这个函数把http.Server 的路由改成了自己的路由,剩下的语句都是配置监听server
所以数据流程是net/http 接受请求,调用server.handler.servehttp处理该次请求,也就是调用app.router.servehttp

在这里插入图片描述
在这里插入图片描述

iris/core/router/router.go
iris 路由默认用mainhandler处理每次请求
在这里插入图片描述

iris/core/router/router.go   iris/context/pool.go
router.mainhandler 在上文app.build中提到的router.buildrouter 中定义
这里是真正处理每次请求的地方,先从cpool 也就是上文第一步提到的contextPool中提取一个ctx对象,交给handlerrequest处理,在释放ctx 对象
ctx 对象相信大家都听熟悉,每个接口的参数都是他,iris 建立了一个sync.pool 临时对象池,当池里没有空闲对象时就调用new 方法创建, 有空闲的当然直接就提取出来啦,然后通过ctx.BeginRequest(w, r)里重新初始化ctx 对象
handlerrequest 不用猜就知道包括iris 的路由算法和我们的各种中间件和最终每个接口的处理函数
最后再释放掉ctx对象.这就是整个框架请求的核心流程
在这里插入图片描述
在这里插入图片描述

iris/core/router/handler.go
接下来就是路由算法,也就是routerhandler.handlerrequest方法里的东西
算法我也没咋细看,想看的自己去看,中间件和接口函数最后就是在这个函数227行调用的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

整体思路就是用自己的路由替代了net/http的路由,建立了一个对象池缓存ctx对象,ctx对象相当于是net/http w和r的合体

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值