网站首页 > 技术文章 正文
19.1 Http服务器请求处理流程图
(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 类关系图
其中:
HTTPServerConnectionDelegate、HTTPMessageDelegate为接口。IOStream、IOLoop、Application、HTTPServer、RequestHandler、HTTPServerRequest是Tornado中比较重要的模块。但是,应用程序开发者一般只针对Application、RequestHandler进行自定义设置与开发,特别是RequestHandler。一个典型的torando应用网站由Application、HTTPServer、以及一序列的RequestHandler组成。
19.3 RequestHandler的处理流程
(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方法,释放相关的资源或变量。
猜你喜欢
- 2025-06-07 Tomcat服务器的部署与优化:从入门到精通
- 2025-06-07 连接池之HikariCP:HikariCP框架设计与功能使用分析(第一部分)
- 2025-06-07 一次完整的HTTP请求与响应涉及了哪些知识?
- 2025-06-07 Excel常用技能分享与探讨(5-宏与VBA简介 VBA之用户窗体-一)
- 2025-06-07 编程英文 - 配置/设置/初始化 (configure/setup/initialize)
- 2025-06-07 Qt/C++编写音视频实时通话/画中画/设备热插拔/本地摄像头和桌面
- 2025-06-07 基于c++的数据库连接池的实现与理解
- 2025-06-07 如何优化一个秒杀项目?
- 2025-06-07 数据库连接池提前初始化引发的异常
- 2025-06-07 Seata源码—6.Seata AT模式的数据源代理一
- 最近发表
- 标签列表
-
- axure 注册码 (25)
- exploit db (21)
- mutex_lock (30)
- oracleclient (27)
- think in java (14)
- javascript权威指南 (19)
- nfs (25)
- componentart (17)
- yii框架 (14)
- springbatch (28)
- oracle数据库备份 (25)
- iptables (21)
- 自动化单元测试 (18)
- python编写软件 (14)
- dir (26)
- connectionstring属性尚未初始化 (23)
- output (32)
- panel滚动条 (28)
- centos 5 4 (23)
- sql学习 (33)
- dfn (14)
- http error 503 (21)
- pop3服务器 (18)
- 图表组件 (17)
- android退出应用 (21)