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), ])