概要 本文介绍Tornado包的基本知识以及简单上手实例。
Tornado Web框架 Tornado是一个轻量级的Web框架,其特点包括:
异步非阻塞IO处理方式
服务端的实现相对容易,建立在TCP协议之上
兼容http和https协议,默认端口80和443
出色的抗负载能力
其高性能来源于充分利用Linux的epoll工具和BSD的kqueue工具,不依赖多进程/线程
Tornado简单应用 例1:创建一个简单的web站点:
server01.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import tornado.webimport tornado.ioloopclass IndexHandler (tornado.web.RequestHandler): def get (self,*args,**kwargs ): self.write("Good day, commander!!!" ) if __name__ == "__main__" : app = tornado.web.Application([ (r"/" ,IndexHandler) ]) app.listen(2020 ) tornado.ioloop.IOLoop.current().start()
启动服务:python server01.py
。在浏览器中输入”本机ip:port”即可访问:
其原理如图所示:最外层是持续监听特定端口的ioloop,每当新的客户端连接时,就会产生一个对应的socket,中间层由Application封装实现地址路由,内核Handler才是真正的网页内容。
例2:带参数解析功能的简单实例:
server02.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 import tornado.webimport tornado.ioloopimport tornado.httpserverimport tornado.optionstornado.options.define("port" ,default=2020 ,type =int ) tornado.options.define("list" ,default=[],type =str ,multiple=True ) class IndexHandler (tornado.web.RequestHandler): def get (self,*args,**kwargs ): self.write("Good day, commander!!! I am waiting for you!!!" ) if __name__ == "__main__" : tornado.options.parse_command_line() print ("port = " ,tornado.options.options.port) print ("list = " ,tornado.options.options.list ) app = tornado.web.Application([ (r"/" ,IndexHandler) ]) server = tornado.httpserver.HTTPServer(app) server.bind(tornado.options.options.port) server.start() tornado.ioloop.IOLoop.current().start()
改动有两处:
1 使用tornado.httpserver.HTTPServer.listen代替app.listen,直观看到服务器创建过程(实际效果是一样的,app封装得更多)
2 使用tornado.options模块管理输入参数列表。define()定义默认参数和属性,parse_command_line()解析命令行输入参数。
带参数运行: python server03.py --port=2021 --list=abc,def,hji
参考