tornado的高性能原理(工作原理):
服务端一开始会监听一个端口,收到连接请求,会为客户端生成一个socket,这个socket给epoll帮忙管理;如果再有一个连接请求,又会生成一个socket给epoll管理,epoll外层是tornado的IOLoop的实例对象,这个对象会一直询问epoll有没有什么可以帮忙的,当epoll发现socket发送请求的时候,epoll就告诉tornado.web.Application类,这里面存着路由映射表,就会给请求映射路由,匹配到某个Handler上,于是Handler就处理请求,然后返回数据到原来的socket里面了,socket就传给了客户端,如此就完成了服务端和客户端的HTTP的数据传输。
一般流程:
输入一个网址 – > 匹配路由 – > 执行Handler – > 执行对应请求的方法来响应浏览器
安装tornado库:
您可以直接通过pip安装tornado,前提是您需要先改源
改源教程戳这里
改源之后,输入pip install tornado
即可
本文需要用到的两个模块:
tornado.ioloop模块:
tornado的核心IO循环模块(等着客户端连接),封装了[Linux的epoll]和BSD的kqueue,这是tornado高效的基础
tornado.web模块:
tornado的基础web框架模块
业务处理类:
类比Django中的视图
视图是处理请求的,请求:GET、POST…
这是个业务处理类,这个类在命名的时候习惯在后面加一个Handler
简单来说,业务处理类就是处理请求用的
例如:
#必须继承tornado.web.RequestHandler类
class IndexHandle(tornado.web.RequestHandler):
def get(self,*args,**kwargs): #处理get请求
pass
#随着学习的深入,您也可以在这里定义其他方法来处理各种请求
生成一个应用(app):
app = tornado.web.Application([(r"绑定的网址目录" , 业务处理类)])
生成app的一个服务器,并监听某个端口:
app.listen(端口号) #端口号是一个int型
注意,此时并未开始监听,也没有启动生成的这个服务器
要启动这个服务器,并开始监听端口,请看下面
tornado.ioloop.IOLoop.current().start()
#IOLoop.current()会返回当前线程的IOLoop实例
IOLoop.start():启动了IOLoop实例的I/O循环,相当于在此开启了一个死循环,同时开启监听
啥是I/O?可以认为是读写,数据的传输
小提示:上面的listen是生成,而start是开始
示例:#运行这段代码之前,您必须确保您已经安装了tornado库,否则将会报错
import tornado.web
import tornado.ioloop
#创建业务处理类
class IndexHandle(tornado.web.RequestHandler):
#处理get请求
def get(self,*args,**kwargs):
self.write('你好啊')
if __name__ == '__main__':
#生成一个应用:
app = tornado.web.Application([(r'/',IndexHandle)])
#生成服务器,监听8080端口:
app.listen(8080)
#启动上面生成的服务器,并开始监听:
tornado.ioloop.IOLoop.current().start()
#运行以上代码,然后打开浏览器,在地址栏输入127.0.0.1:8080,会看到“你好啊”