可扩展的非阻塞式 Tornado 框架基础

发表于:2012-10-08来源:Anjuke QA Team作者:parisyu点击数: 标签:Tornado
可扩展的非阻塞式 Tornado 框架基础.Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像 web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具

  一、Tornado框架概述

  Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像 web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。

  Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 C10K problem。)

  二、HelloWorld

  上述代码在浏览器中打印一行字符串(Hello, world!)。

  Tornado框架自身实现了一个HTTP Server,因此不需要额外的Web Server,只需要运行Python脚本即可启动整个应用。

  在Tornado框架中,一个URI对应一个RequestHandler,每一个Handler负责处理该URI的HTTP请求,GET、 POST、HEAD等HTTP方法对应Handler的get()、post()、head()等方法,HTTP请求的处理逻辑在相应的方法内实现。 Handler可以看做是Tornado框架里的Controller。

  RequestHandler的write()方法,将字符串写入Response;render()方法将模板文件写入Response。

  三、HelloWorld的进一步扩充

  define()函数为脚本扩展命令行参数。脚本启动时的参数可以通过python –help命令查看:

  port参数是自定义的启动参数,其它参数均为框架自带的默认启动参数。

  使用启动参数的方法如下:

  四、静态页面的处理

  tornado.web.Application类的初始化,handlers是必须传入的固定参数,后面是一个可变长的参数列表。

  向handlers列表中添加新元素,即可扩展URL路由表。

  template_path指定模板文件的所在目录,RequestHandler渲染模板文件时,会自动到该参数指定的目录获取模板文件。例如上述脚本指定template_path的目录为【当前脚本所在目录下的templates目录】,即“./templates”,因此,self.render(“index.html”)方法实际上渲染的是“./templates/index.html”。

  static_path指定静态文件(img/css/js)的所在目录。在模板文件中,通过static_url()函数访问该目录的文件,如下:

  五、数据库的处理

  Tornado默认只封装了MySQL的访问接口,访问其它数据库需要使用相应数据库的Python Interface。

  在Application类的初始化方法中,添加数据库连接。

  在RequestHandler类中添加数据库的访问方法。

  在模板文件中,使用RequestHandler传递过来的数据(entries)。

  六、表单的处理

  在模板文件中,按照通用的HTML方式编写表单即可。

  在RequestHandler的相应方法(get/post)中,通过get_argument()函数获取表单提交的数据。

  七、参考资料

  官网:http://www.tornadoweb.org/

  中文版可以看这里:http://www.tornadoweb.cn/

  官方API参考:http://www.tornadoweb.org/documentation/index.html

  《Intorduction to Tornado》:http://ishare.iask.sina.com.cn/f/24156048.html

原文转自:http://www.ltesting.net