https://www.cnblogs.com/wupeiqi/p/4375445.html https://blog.csdn.net/belalds/article/details/80575755
tornado源码分析流程:
a. python app.py-----从执行开始-加载路由关系-加载配置文件-启动socket
b. 用户发请求-匹配路由-执行指定类的方法
c. 异步非阻塞
1.1 Tornado是为何物
Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架在2009年9月以开源软件形式开放给大众。
特点:
作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO的处理方式。
作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对比,结果最大浏览量超过第二名近40%。
性能: Tornado有着优异的性能。它试图解决C10k问题,即处理大于或等于一万的并发.
Tornado框架和服务器一起组成一个WSGI的全栈替代品。单独在WSGI容器中使用tornado网络框架或者tornaod http服务器,有一定的局限性,为了最大化的利用tornado的性能,推荐同时使用tornaod的网络框架和HTTP服务器
1.2 Tornado与Django
Django
Django是走大而全的方向,注重的是高效开发,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。
Django提供的方便,也意味着Django内置的ORM跟框架内的其他模块耦合程度高,应用程序必须使用Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利。
session功能
后台管理
ORM
Tornado
Tornado走的是少而精的方向,注重的是性能优越,它最出名的是异步非阻塞的设计方式。
HTTP服务器
异步编程
WebSockets
2.1安装
pip install tornado
2.2经典实例
importtornado.ioloopimporttornado.webclassMainHandler(tornado.web.RequestHandler):defget(self):
self.write("Hello, world")classLoginHandler(tornado.web.RequestHandler):defget(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)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------------------------------------
Title登录
运行该脚本,依次执行:
创建一个Application对象,并把一个正则表达式'/'和类名MainHandler传入构造函数:tornado.web.Application(...)
执行Application对象的listen(...)方法,即:application.listen(8888)
执行IOLoop类的类的 start() 方法,即:tornado.ioloop.IOLoop.instance().start()
整个过程其实就是在创建一个socket服务端并监听8888端口,当请求到来时,根据请求中的url和请求方式(post、get或put等)来指定相应的类中的方法来处理本次请求,在上述demo中只为url为http://127.0.0.1:8888/index的请求指定了处理类MainHandler。所以,在浏览器上访问:http://127.0.0.1:8888/index,则服务器给浏览器就会返回 Hello,world ,否则返回 404: Not Found(tornado内部定义的值), 即完成一次http请求和响应。
由上述分析,我们将整个Web框架分为两大部分:
待请求阶段,即:创建服务端socket并监听端口
处理请求阶段,即:当有客户端连接时,接受请求,并根据请求的不同做出相应的相应