tornado 源码包中 demos 目录下包含一些示例程序,就从最简单的 helloworld.py 来看一个 tornado 应用程序的代码结构。
完整的实例程序如下:
06 |
import tornado.httpserver |
08 |
import tornado.options |
11 |
from tornado.options import define,
options |
13 |
define( "port" ,
default = 8888 , help = "run
on the given port" , type = int ) |
16 |
class MainHandler(tornado.web.RequestHandler): |
18 |
self .write( "Hello,
Nowamagic" ) |
22 |
tornado.options.parse_command_line() |
23 |
application = tornado.web.Application([ |
26 |
http_server = tornado.httpserver.HTTPServer(application) |
27 |
http_server.listen(options.port) |
28 |
tornado.ioloop.IOLoop.instance().start() |
31 |
if __name__ = = "__main__" : |
首先是一组 import。这个再正常不过了,当然,之前该有的注释什么的还是要有的。
1 |
import tornado.httpserver |
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): |
3 |
self .write( "Hello,
Nowamagic" ) |
XXHandler 针对映射的 url 的具体实现。
Handler 下面是 main() 函数的定义:
2 |
tornado.options.parse_command_line() |
3 |
application = tornado.web.Application([ |
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 工作。当然,具体的实现还是比较复杂的,这里仅仅是简单概括一下。
总结下来,代码组织如下: