Tornado基础
Tornado概述
Python常用后端框架:
Flask: 轻量级,需要使用大量插件,自由灵活
Django: 重量级,不需要太多插件,没那么灵活
Tornado: 主要特点:①可以实现长连接Websocket, ②可以实现高并发
Python的Web框架种类繁多(比Python语言的关键字还要多),但在众多优秀的Web框架中,Tornado框架最适合用来开发需要处理长连接和应对高并发的Web应用。Tornado框架在设计之初就考虑到性能问题,它可以处理大量的并发连接,更轻松的应对C10K(万级并发)问题,是非常理想的实时通信Web框架。
Tornado框架源于FriendFeed网站,在FriendFeed网站被Facebook收购之后得以开源,正式发布的日期是2009年9月10日。Tornado能让你能够快速开发高速的Web应用,如果你想编写一个可扩展的社交应用、实时分析引擎,或RESTful API,那么Tornado框架就是很好的选择。Tornado其实不仅仅是一个Web开发的框架,它还是一个高性能的事件驱动网络访问引擎,内置了高性能的HTTP服务器和客户端(支持同步和异步请求),同时还对WebSocket提供了完美的支持。
了解和学习Tornado最好的资料就是它的官方文档,在tornadoweb.org上面有很多不错的例子,你也可以在Github上找到Tornado的源代码和历史版本。
5分钟上手Tornado
-
安装Tornado。
pip install tornado
-
编写Web应用: example01.py。
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write('<h1>Hello, world!</h1>') def main(): app = tornado.web.Application(handlers=[(r'/', MainHandler), ]) app.listen(8888) tornado.ioloop.IOLoop.current().start() if name == 'main': main()
-
运行并访问应用。
python example01.py
使用命令行参数动态设置端口
import tornado.ioloop
import tornado.web
from tornado.options import define, options, parse_command_line
# 定义默认端口
define('port', default=8000, type=int)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write('<h1>Hello, world!</h1>')
def main():
# python example01.py --port=8888
parse_command_line()
app = tornado.web.Application(handlers=[(r'/', MainHandler), ])
app.listen(options.port)
tornado.ioloop.IOLoop.current().start()
if __name__ == '__main__':
main()
在启动Web应用时,如果没有指定端口,将使用define
函数中设置的默认端口8000,如果要指定端口,可以使用下面的方式来启动Web应用。
python example01.py --port=8888
路由解析
上面我们曾经提到过创建Application
实例时需要指定handlers
参数,这个参数非常重要,它应该是一个元组的列表,元组中的第一个元素是正则表达式,它用于匹配用户请求的资源路径;第二个元素是RequestHandler
的子类。在刚才的例子中,我们只在handlers
列表中放置了一个元组,事实上我们可以放置多个元组来匹配不同的请求(资源路径),而且可以使用正则表达式的捕获组来获取匹配的内容并将其作为参数传入到get
、post
这些方法中。