Tornado和現在的主流 Web 服務器框架(包括大多數 Python 的框架)有著明顯的區別:它是非阻塞式服務器,而且速度相當快。得利于其非阻塞的方式和對 epoll 的運用,Tornado 每秒可以處理數以千計的連接,因此 Tornado 是實時 Web 服務的一個理想框架。我們開發這個 Web 服務器的主要目的就是為了處理 FriendFeed 的實時功能 ——在 FriendFeed 的應用里每一個活動用戶都會保持著一個服務器連接。下面一起來看看Python的Web框架tornado簡單入門吧。
簡單示例
以下是經典的 “Hello, world”進行代碼示例:
#!/usr/bin/env python # coding:utf-8 import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") application = tornado.web.Application([ (r"/index", MainHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
整個過程其實就是在創建一個socket服務端并監聽8888端口,當請求到來時,根據請求中的url和請求方式(post、get或put等)來指定相應的類中的方法來處理本次請求,在上述demo中只為url為http://127.0.0.1:8888/index的請求指定了處理類MainHandler(具體如何尋找見下文)。所以,在瀏覽器上訪問:http://127.0.0.1:8888/index,則服務器給瀏覽器就會返回 Hello,world ,否則返回 404: Not Found(tornado內部定義的值), 即完成一次http請求和響應。
由上述分析,我們將整個Web框架分為兩大部分:
待請求階段,即:創建服務端socket并監聽端口
處理請求階段,即:當有客戶端連接時,接受請求,并根據請求的不同做出相應的響應。
模塊索引
最重要的一個模塊是web,它就是包含了 Tornado 的大部分主要功能的 Web 框架。其它的模塊都是工具性質的,以便讓 web 模塊更加有用后面的Tornado 攻略 詳細講解了 web 模塊的使用方法。
主要模塊
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的簡單介紹,后續將更新Tornado的各種用法。