tornado 源码包中 demos 目录下包含一些示例程序,就从最简单的 helloworld.py 来看一个 tornado 应用程序的代码结构。
完整的实例程序如下:
01 #!/usr/bin/env python 02 # 03 # Copyright 2009 Facebook 04 # 05 06 import tornado.httpserver 07 import tornado.ioloop 08 import tornado.options 09 import tornado.web 10 11 from tornado.options import define, options 12 13 define("port", default=8888, help="run on the given port", type=int) 14 15 16 class MainHandler(tornado.web.RequestHandler): 17 def get(self): 18 self.write("Hello, Nowamagic") 19 20 21 def main(): 22 tornado.options.parse_command_line() 23 application = tornado.web.Application([ 24 (r"/", MainHandler), 25 ]) 26 http_server = tornado.httpserver.HTTPServer(application) 27 http_server.listen(options.port) 28 tornado.ioloop.IOLoop.instance().start() 29 30 31 if __name__ == "__main__": 32 main()
首先是一组 import。这个再正常不过了,当然,之前该有的注释什么的还是要有的。
1 import tornado.httpserver 2 import tornado.ioloop 3 import tornado.options 4 import tornado.web 5 6 from tornado.options import define, options
接下来,是定义应用程序的选项,这样可以在启动应用程序的时候指定一些参数。tornado 提供了方法 tornado.options.define 来简化了选项参数的定义,具体的可以通过 help 来查看。这里有直接的例子,定义端口参数:
1 define("port", default=8888, help="run on the given port", type=int)
接下来是 MainHandler 的设置:
1 class MainHandler(tornado.web.RequestHandler): 2 def get(self): 3 self.write("Hello, Nowamagic")
XXHandler 针对映射的 url 的具体实现。
Handler 下面是 main() 函数的定义:
1 def main(): 2 tornado.options.parse_command_line() 3 application = tornado.web.Application([ 4 (r"/", MainHandler), 5 ]) 6 http_server = tornado.httpserver.HTTPServer(application) 7 http_server.listen(options.port) 8 tornado.ioloop.IOLoop.instance().start()
应用程序执行时,会先解析选择参数。之后创建一个 Application 实例并传递给 HTTPServer 实例,之后启动这个实例,到此,http server 启动了。tornado.httpserver 模块用来支持非阻塞的 HTTP Server。
启动服务器之后,还需要启动 IOLoop 的实例,这样可以启动事件循环机制,配合非阻塞的 HTTP Server 工作。当然,具体的实现还是比较复杂的,这里仅仅是简单概括一下。
认识tornado(一)
认识tornado(二)
认识tornado(三)
认识tornado(四)
认识tornado(五)