Tornado框架part1
一、tornado介绍
1、介绍
Tornado是使用Python开发的全栈式(full-stack)Web框架和异步网络库,最早由4名Google前软件工程师(布雷特·泰勒)2007创办的Friendfeed(一个社交聚合网站)开发而来的。通过使用非阻塞IO,Tornado可以处理数以万计的开放连接,是long polling、WebSockets和其他需要为用户维护长连接应用的理想选择。
目前最新版本6.1, 我们实际项目开发是使用的不可能是最新版本,所以在此我们在tornado基础阶段所学所用的版本为6.0.
2、特点
-
开源的轻量级全栈式Web框架,提供了一整套完善的异步编码方案。
-
高性能
基于协程,底层就是基于asyio来实现的完整的协程调度
采用异步非阻塞IO处理方式,不依赖多进程或多线程
采用单进程单线程异步IO的网络模式,其高性能源于Tornado基于Linux的Epoll(UNIX为kqueue)的异步网络IO,具有出色的抗负载能力Tornado为了实现高并发和高性能,使用了一个
IOLoop
事件循环来处理socket
的读写事件 -
WSGI全栈替代产品,Tornado把应用(Application)和服务器(Server)结合起来,既是WSGI应用也可以是WSGI服务,通俗来讲就是说,Tornado既是web服务器也是web框架,甚至可以通过Tornado替代uwsgi/gunicorn来运行Flask或者django框架
3、主要部分
- Web 框架 (包括用来创建 Web 应用程序的
RequestHandler
类, 还有很多其它支持的类). - HTTP 客户端和服务器的实现 (
HTTPServer
和AsyncHTTPClient
). - 异步网络库 (
IOLoop
和IOStream
), 对 HTTP 的实现提供构建模块, 还可以用来实现其他协议. - 协程库 (
tornado.gen
) 让用户通过更直接的方法来实现异步编程, 而不是通过回调的方式.
二、项目的基本运行
1、安装
pip3 install tornado==6.0.4
基本写法如下:
server.py:
from tornado import ioloop
from tornado import web
class Home(web.RequestHandler):
def get(self):
# self.write 响应数据
self.write("hello!")
def make_app():
# Application是tornado web框架的核心应用类,是与服务器对应的接口,里面保存了路由映射表
# handlers 设置路由列表
return web.Application(handlers=[
(r'/',Home)
])
if __name__ == "__main__":
# 创建应用实例对象
app = make_app()
# 设置监听的ip和端口
app.listen(8888)
# ioloop,全局的tornado事件循环,是服务器的引擎核心,start表示创建IO事件循环,等待客户端连接
ioloop.IOLoop.current().start()
运行后浏览器访问:
2、开启调试模式
from tornado import ioloop
from tornado import web
from tornado import autoreload
from tornado.options import define,options,parse_command_line
# 配置信息
settings = {
'debug':True
}
define("port",default=8888,type=int,help="设置监听端口号,默认8888")
# 类视图
class Home(web.RequestHandler):
def get(self):
# self.write 响应数据
self.write("hello!")
def make_app():
# Application是tornado web框架的核心应用类,是与服务器对应的接口,里面保存了路由映射表
# handlers 设置路由列表
return web.Application(handlers=[
(r'/',Home)
],**settings) #加载配置
if __name__ == "__main__":
# 解析终端启动命令,格式:python server.py --port=端口号
parse_command_line()
# 创建应用实例对象
app = make_app()
# 设置监听的ip和端口
app.listen(options.port)
# ioloop,全局的tornado事件循环,是服务器的引擎核心,start表示创建IO事件循环,等待客户端连接
ioloop.IOLoop.current().start()
运行结果:
3、路由拆分
from tornado import ioloop
from tornado import web
from tornado.options import define,options,parse_command_line
# 配置信息
settings = {
'debug':True
}
# 类视图
class Home(web.RequestHandler):
def get(self):
# self.write 响应数据
self.write("hello!")
url = [
(r"/",Home)
]
if __name__ == "__main__":
define("port", default=8888, type=int, help="设置监听端口号,默认8888")
define("host", default="127.0.0.1"