Tornado就是咱们在 FriendFeed 的 Web 服务器及其经常使用工具的开源版本。Tornado 和如今的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,并且速度至关快。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒能够处理数以千计的链接,所以 Tornado 是实时 Web 服务的一个 理想框架。咱们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每个活动用户都会保持着一个服务器链接。python
Tornado的安装:ios
手动安装: 下载 tornado-2.0.tar.gzgit
tar xvzf tornado-2.0.tar.gz cd tornado-2.0 python setup.py build sudo python setup.py install
Tornado 的代码托管在 GitHub 上面。对于 Python 2.6 以上的版本,由于标准库中已经包括了对 epoll
的支持,因此你能够不用 setup.py
编译安装,只要简单地将 tornado 的目录添加到 PYTHONPATH
就可使用了。固然在安装Torando以前你须要安装PycURL以及simplejson。github
web
- FriendFeed 使用的基础 Web 框架,包含了 Tornado 的大多数重要的功能escape
- XHTML, JSON, URL 的编码/解码方法database
- 对 MySQLdb
的简单封装,使其更容易使用template
- 基于 Python 的 web 模板系统httpclient
- 非阻塞式 HTTP 客户端,它被设计用来和 web
及 httpserver
协同工做auth
- 第三方认证的实现(包括 Google OpenID/OAuth、Facebook Platform、Yahoo BBAuth、FriendFeed OpenID/OAuth、Twitter OAuth)locale
- 针对本地化和翻译的支持options
- 命令行和配置文件解析工具,针对服务器环境作了优化httpserver
- 服务于 web
模块的一个很是简单的 HTTP 服务器的实现iostream
- 对非阻塞式的 socket 的简单封装,以方便经常使用读写操做ioloop
- 核心的 I/O 循环
Tornado 的 Web 程序会将 URL 或者 URL 范式映射到 tornado.web.RequestHandler
的子类上去。在其子类中定义了get()
或 post()
方法,用以处理不一样的 HTTP 请求。web
下面的代码将 URL 根目录 /
映射到 MainHandler
,还将一个 URL 范式 /story/([0-9]+)
映射到 StoryHandler
。正则表达式匹配的分组会做为参数引入 的相应方法中:正则表达式
class MainHandler(tornado.web.RequestHandler): def get(self): self.write("You requested the main page") class StoryHandler(tornado.web.RequestHandler): def get(self, story_id): self.write("You requested the story " + story_id) application = tornado.web.Application([ (r"/", MainHandler), (r"/story/([0-9]+)", StoryHandler), ])