tornado学习笔记19 Tornado框架分析

19.1 Http服务器请求处理流程图

image

 

(1) 调用HTTPServer的bind方法,绑定Socket的监听端口号;

(2) 调用HTTPServer的listen方法,初始化一个listen socket对象;

(3) 调用add_hander方法,将初始化的listen socket对象添加至IOLoop池中,这时的socket就开始监听来自客户端的请求。

(4) 客户端发送HTTP请求;

(5) listen socket监听到客户端的请求,调用listen socket的accept方法,表示开始接收请求;同时重新生成一个新的socket,为了区分,叫做client socket。

(6) IOLoop回调HTTPServer的 handle_stream方法;

(7) handle_stream初始化HTTP1ServerConnection对象,并将其添加至池中;

(8) 调用HTTP1ServerConnection的start_serve方法,开始处理请求,初始化IOStream、HTTP1Connection对象,同时初始化_RequestDispater请求分发器。

(9) _RequestDispater请求分发器初始化HttpServerRequest对象,请根据Application配置的映射设置hanlder_class以及handler_kwargs等属性。

(10) HTTP1Connection读取请求的信息,比如请求头,请求体等信息。

(11) 解析读取的请求头、请求体数据块信息,供自定义的RequestHandler调用。

(12) 调用自定义的RequestHandler的相关的方法,比如get、post。

(13) 将处理的结果(一般为RequestHandler的render方法返回)返回给HTTP1Connection;

(14) HTTP1Connection将Response写入到IOStream流中;

(15) client socket将流返回给客户端。

 

19.2 类关系图

image

其中:

HTTPServerConnectionDelegate、HTTPMessageDelegate为接口。IOStream、IOLoop、Application、HTTPServer、RequestHandler、HTTPServerRequest是Tornado中比较重要的模块。但是,应用程序开发者一般只针对Application、RequestHandler进行自定义设置与开发,特别是RequestHandler。一个典型的torando应用网站由Application、HTTPServer、以及一序列的RequestHandler组成。

 

19.3 RequestHandler的处理流程

image

(1) 首先进行初始化RequestHandler对象;

(2) 调用自定义的initialize方法,进行相关的初始化操作,比如数据库连接、各种变量的初始化等等;

(3) 根据Http请求的类型,判断是否支持该类请求,RequestHandler默认支持的方法包括GET、POST、HEAD、DELETE、PATCH、PUT、OPTIONS;

(4) 如果支持,则调用prepare方法。如果不支持,则结束该流程;

(5) 判断prepare方法是否对finished属性设置为True,如果是,则结束该流程,如果没有,则转入下一步。

(6) 调用相应的方法,比如get、post;

(7) 调用write或者render方法;

(8) 判断finished属性设置为True,如果是,则结束该流程,如果没有,则转入下一步。

(9) 调用finish方法,将数据写入返回流中。

(10) 最后调用on_finish方法,释放相关的资源或变量。

posted @ 2016-01-12 15:14  廖飞  阅读(1529)  评论(1编辑  收藏  举报