beego学习笔记(4):开发文档阅读(6)

beego的响应流程:session

1.监听的端口接收数据,默认是8080端口。函数

2.用户请求到达8080端口后,开始数据处理流程。code

3.初始化CONTEXT对象。判断是不是WEBSOCKET请求,若是是,设置INPUT。同时,判断请求的方法,是不是标准方法(GET、POST、PUT、DELETE、PATCH、OPTIONS、HEAD),以避免被恶意访问。router

4.执行beforerouter过滤器。固然,在beego里有开关设置,若是使用该过滤器,则必须打开这个开关。若是在执行过滤器的过程当中,responseWriter已经有数据了,则中断这个过滤器的执行。直接调到监控诊断。对象

5.开始执行静态文件的处理,拉进行匹配。,查看用户的请求 URL 是否和注册在静态文件处理 StaticDir 中的 prefix 是否匹配。若是匹配的话,采用 http 包中默认的 ServeFile 来处理静态文件。继承

6.若是不是静态文件,则初始化session模块(若是开启了session的话)。这里就须要注意,只能在afterstatic的过滤其中使用session,若是是beforerouter过滤器,就会出错进程

7.开始执行 AfterStatic 过滤器,若是在执行过滤器过程当中,responseWriter 已经有数据输出了,那么就提早结束该请求,直接跳转到监控判断。资源

8.执行过过滤器以后,开始从固定的路由规则中查找和请求 URL 相匹配的对象。这个匹配是全匹配规则,即若是用户请求的 URL 是 /hello/world,那么固定规则中 /hello 是不会匹配的,只有彻底匹配才算匹配。若是匹配的话就进入逻辑执行,若是不匹配进入下一环节的正则匹配。路由

9.正则匹配是进行正则的全匹配,这个正则是按照用户添加 beego 路由顺序来进行匹配的,也就是说,若是你在添加路由的时候你的顺序影响你的匹配。和固定匹配同样,若是匹配的话就进行逻辑执行,若是不匹配进入 Auto 匹配。it

10.若是用户注册了 AutoRouter,那么会经过 controller/method 这样的方式去查找对应的 Controller 和他内置的方法,若是找到就开始执行逻辑,若是找不到就跳转到监控判断。

11.若是找到 Controller 的话,那么就开始执行逻辑,首先执行 BeforeExec 过滤器,若是在执行过滤器过程当中,responseWriter 已经有数据输出了,那么就提早结束该请求,直接跳转到监控判断。

12.Controller开始执行init函数。这个实际上就是cotroller本身的初始化。不建议在继承的时候,修改这些东西。

  1. 是否开启了 XSRF,开启的话就调用 Controller 的 XsrfToken,而后若是是 POST 请求就调用 CheckXsrfCookie 方法。
  2. 继续执行 Controller 的 Prepare 函数,这个函数通常是预留给用户的,用来作 Controller 里面的一些参数初始化之类的工做。若是在初始化中 responseWriter 有输出,那么就直接进入 Finish 函数逻辑。
  3. 若是没有输出的话,那么根据用户注册的方法执行相应的逻辑,若是用户没有注册,那么就调用 http.Method 对应的方法(Get/Post 等)。执行相应的逻辑,例如数据读取,数据赋值,模板显示之类的,或者直接输出 JSON 或者 XML。
  4. 若是 responseWriter 没有输出,那么就调用 Render 函数进行模板输出。
  5. 执行 Controller 的 Finish 函数,这个函数是预留给用户用来重写的,用于释放一些资源。释放在 Init 中初始化的信息数据。
  6. 执行 AfterExec 过滤器,若是有输出的话就跳转到监控判断逻辑。
  7. 执行 Controller 的 Destructor,用于释放 Init 中初始化的一些数据。
  8. 若是这一路执行下来都没有找到路由,那么会调用 404 显示找不到该页面。
  9. 最后全部的逻辑都汇聚到了监控判断,若是用户开启了监控模块(默认是开启一个 8088 端口用于进程内监控),这样就会把访问的请求连接扔给监控程序去记录当前访问的 QPS,对应的连接访问的执行时间,请求连接等。
相关文章
相关标签/搜索