• 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方法,释放相关的资源或变量。

  • 相关阅读:
    RAID磁盘阵列详解以及软RAID的实施部署
    Ubuntu 安装 配置 Mysql
    Asp.net页面之间传递参数的几种方法
    asp.net中网页间传递参数用什么方法比较
    Asp.net页面之间传递参数的几种方法
    asp.net中网页间传递参数用什么方法比较
    Asp.net页面之间传递参数的几种方法
    asp.net中网页间传递参数用什么方法比较
    CSS2.0中最常用的18条技巧
    Asp.net页面之间传递参数的几种方法
  • 原文地址:https://www.cnblogs.com/liaofeifight/p/5123603.html
Copyright © 2020-2023  润新知