tornado框架介绍
一、安装tornado
手动安装: 下载 tornado-1.2.1.tar.gz
tar xvzf tornado-1.2.1.tar.gz
cd tornado-1.2.1
python setup.py build
sudo python setup.py install
安装要求:需要先安装:python2.7
1 2 3 4 5 6 7 8 9 | Mac OS X 10.6 (Python 2.6 + ) sudo easy_install setuptools pycurl Ubuntu Linux (Python 2.6 + ) sudo apt - get install python - pycurl Ubuntu Linux (Python 2.5 ) sudo apt - get install python - dev python - pycurl python - simplejson |
安装过程:
下载:tornado-1.2.1.tar.gz,解后解压
开始安装:
1 2 3 4 5 6 7 8 9 10 | #先检查是否是python2.7 C:\tornado - 1.2 . 1 >python Python 2.7 . 13 (v2. 7.13 :a06454b1afa1, Dec 17 2016 , 20 : 53 : 40 ) [MSC v. 1500 64 bit (AMD64)] on win32 Type "help" , "copyright" , "credits" or "license" for more information. >>> exit() #开始安装 C:\tornado - 1.2 . 1 >python setup.py build C:\tornado - 1.2 . 1 >python setup.py install |
二、介绍tornado
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Tornado: 1. 版本 4.4 要求: 1.2 . 1 环境:Python2. 7 2. 源码分析流程: a. python app.py - 加载路由关系 - 加载配置文件 - 启动socket 作业: 经历的类 创建对象后,对象中大概封装了 类中的方法的执行流程 b. 用户发请 - 匹配路由 - 执行指定类的方法 c. 异步非阻塞 |
三、简单介绍tornado的使用
示例:
代码:
app.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get( self ): self .write( "Hello, world" ) class LoginHandler(tornado.web.RequestHandler): def get( self ): # self.write("请登录") self .render( "login.html" ) def post( self , * args, * * kwargs): v = self .get_argument( 'username' ) print (v) self .redirect( '/index.html' ) settings = { 'template_path' : 'templates' , 'static_path' : 'static' , 'static_url_prefix' : '/ppp/' , } # application对象中封装了:路由信息,配置信息 application = tornado.web.Application([ (r "/login.html" , LoginHandler), (r "/index.html" , MainHandler), ], * * settings) # application.add_handlers('buy.oldboy.com',[ # (r"/login.html", LoginHandler), # (r"/index.html", MainHandler), # ]) if __name__ = = "__main__" : # 创建socket对象 # sock = socket.socket() # inputs = [socket,] application.listen( 8888 ) # 开启 r,w,e = select.select(inputs,) tornado.ioloop.IOLoop.instance().start() |
login.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!DOCTYPE html> <html lang = "en" > <head> <meta charset = "UTF-8" > <title>Title< / title> < / head> <body> <h1>登录< / h1> <form action = "/login.html" method = "POST" > < input type = "text" name = "username" placeholder = "用户名" / > < input type = "submit" value = "提交" / > < / form> <img src = "/ppp/1.png" > < / body> < / html> |
用运行Python程序的方法运行,注意监听的端口。
运行结果:
四、tornado源码之待请求阶段
上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分:
- 启动程序阶段,又称为待请求阶段(上图1、2所有系列和3.0)
- 接收并处理客户端请求阶段(上图3系列)
简而言之:
1、在启动程序阶段,第一步,获取配置文件然后生成url映射(即:一个url对应一个XXRequestHandler,从而让XXRequestHandler来处理指定url发送的请求);第二步,创建服务器socket对象并添加到epoll中;第三步,创建无线循环去监听epoll。
2、在接收并处理请求阶段,第一步,接收客户端socket发送的请求(socket.accept);第二步,从请求中获取请求头信息,再然后根据请求头中的请求url去匹配某个XXRequestHandler;第三步,匹配成功的XXRequestHandler处理请求;第四步,将处理后的请求发送给客户端;第五步,关闭客户端socket。
本篇的内容主要剖析【启动程序阶段】,下面我们就来一步一步的剖析整个过程,在此阶段主要是有下面重点标注的三个方法来实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构