您的位置:首页 > 编程语言

初识 tornado 应用程序的代码结构

2012-04-02 22:37 337 查看
本来 tornado 文档中给出了示例程序,但是厌倦了类似教科书式的演示说明,总感觉有些单调。好在

tornado 源码包中 demos 目录下包含一些示例程序,虽然不知道是否可以用作成熟的产品,但总归有

点实用的感觉。就从最简单的 helloworld.py 来看一个 tornado 应用程序的代码结构。

首先是一组 import。这个再正常不过了,当然,之前该有的注释什么的还是要有的

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

from tornado.options import define, options


接下来,是定义应用程序的选项,这样可以在启动应用程序的时候指定一些参数。tornado 提供了方法

tornado.options.define 来简化了选项参数的定义,具体的可以通过 help 来查看。这里有直接的例子,

定义端口参数:

define("port", default=8888, help="run on the given port", type=int)


因为 helloworld.py 相对比较简单,没有太多的逻辑需要实现,所以代码结构也有些简单。没有关系,可以

看看 demos 下面其他应用的代码,仅仅是看看组织结构,实现方面还得花点时间去研究研究。可以看出,

典型的代码结构是:

class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r"/", MainHandler),
...
]
settings = dict(...)
tornado.web.Application.__init__(self, handlers, **settings)

class BaseHandler(tornado.web.RequestHandler):
...
即一开始定义 Application 类,然后在其 __init__ 方法中设置应用程序的 url mapping/settings 等,最后还

需要调用基类的 __init__ 来完成初始化。接下来定义一个 BaseHandler,定义一些基本的操作、或者公共

操作。再往下就是其他 XXHandler 针对映射的 url 的具体实现了。

在 XXHandler 定义之后,是 main() 函数的定义:

def main():
tornado.options.parse_command_line()
http_server = tornado.httpserver.HTTPServer(Application())
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
main()
应用程序执行时,会先解析选择参数。之后创建一个 Application 实例并传递给 HTTPServer 实例,之后启动

这个实例,到此,http server 启动了。tornado.httpserver 模块用来支持非阻塞的 HTTP Server。启动服务器

之后,还需要启动 IOLoop 的实例,这样可以启动事件循环机制,配合非阻塞的 HTTP Server 工作。当然,具体

的实现还是比较复杂的,这里仅仅是简单概括一下。

总结下来,代码组织如下:

注释
import 语句
选项参数定义
Application定义
BaseHandler定义
XXHandlers定义
main()定义
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: