手把手带你写一个Web框架
叶剑峰
腾讯高级工程师,前滴滴技术专家
新⼈⾸单¥59
1078 人已学习
课程目录
已更新 6 讲 / 共 34 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词|为什么我们要从零开发框架?
免费
实战第1关:从零开始 (5讲)
01|net/http:使用标准库搭建Server并不是那么简单
02|Context:请求控制器,让每个请求都在掌控之中
03|路由:如何让请求更快寻找到目标函数?
04|中间件:如何提高框架的可拓展性?
05|封装:如何让你的框架更好用?
手把手带你写一个Web框架
15
15
1.0x
00:00/00:00
登录|注册

04|中间件:如何提高框架的可拓展性?

你好,我是轩脉刃。
到目前为止我们已经完成了 Web 框架的基础部分,使用 net/http 启动了一个 Web 服务,并且定义了自己的 Context,可以控制请求超时。
之前在讲具体实现的时候,我们反复强调要注意代码的优化。那么如何优化呢?具体来说,很重要的一点就是封装。所以今天我们就回顾一下之前写的代码,看看如何通过封装来进一步提高代码扩展性。
在第二课,我们在业务文件夹中的 controller.go 的逻辑中设置了一个有超时时长的控制器:
func FooControllerHandler(c *framework.Context) error {
...
// 在业务逻辑处理前,创建有定时器功能的 context
durationCtx, cancel := context.WithTimeout(c.BaseContext(), time.Duration(1*time.Second))
defer cancel()
go func() {
...
// 执行具体的业务逻辑
time.Sleep(10 * time.Second)
// ...
finish <- struct{}{}
}()
// 在业务逻辑处理后,操作输出逻辑...
select {
...
case <-finish:
fmt.Println("finish")
...
}
return nil
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
该试读文章来自付费专栏《手把手带你写一个Web框架》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥59
立即订阅
登录 后留言

精选留言(3)

  • qinsi
    想到几个点:

    * 中间件的注册是有顺序的。比如最后才注册Recovery的话,pipeline中在Recovery前面的中间件如果panic了还是没法recover的
    * 中间件需要显式调用ctx.Next(),如果写中间件时忘记了的话pipeline就断了。或许可以把中间件进一步拆成preRequest()和postRequest()两部分
    * 中间件本质是装饰器模式,如果能像Java/Python里那样写装饰器标注的话可能意图更明显
    2021-09-20
  • liyanfeng
    请教一下老师的UML图是用哪个软件画的哈?
    2021-09-20
    1
  • liyanfeng
    这么好的课,大家快来买😄,熟悉加意外的感觉,真好
    2021-09-20
收起评论
3
返回
顶部