Tornado 是一個Python web框架和異步網絡庫,起初由 FriendFeed 開發. 通過使用非阻塞網絡I/O, Tornado可以支撐上萬級的連接,處理 長連接, WebSockets ,和其他需要與每個用戶保持長久連接的應用.。
Tornado是使用Python編寫的一個強大的、可擴展的Web服務器。它在處理嚴峻的網絡流量時表現得足夠強健,但卻在創建和編寫時有着足夠的輕量級,並能夠被用在大量的應用和工具中。
Tornado 大體上可以被分爲4個主要的部分:
- web框架 (包括創建web應用的 RequestHandler 類,還有很多其他支持的類)
- HTTP的客戶端和服務端實現 (HTTPServer and AsyncHTTPClient)
- 異步網絡庫 (IOLoop and IOStream), 爲HTTP組件提供構建模塊,也可以用來實現其他協議
- 協程庫 (tornado.gen) 允許異步代碼寫的更直接而不用鏈式回調的方式
Tornado主要使用的包
-
web框架
tornado.web — RequestHandler 和 Application 類
tornado.template — 產生靈活的輸出
tornado.escape — 轉義和字符串操作
tornado.locale — 國際化支持
tornado.websocket — 瀏覽器與服務器雙向通信 -
HTTP servers and clients
tornado.httpserver — 非阻塞 HTTP server
tornado.httpclient — 異步 HTTP 客戶端
tornado.httputil — 操作HTTP頭和url
tornado.http1connection – HTTP/1.x 客戶機/服務器的實現 -
異步網絡
tornado.ioloop — 主事件循環
tornado.iostream — :方便的爲非阻塞套接字包裝
tornado.netutil — 各種各樣的網絡工具
tornado.tcpclient — IOStream 連接
tornado.tcpserver — 基於 IOStream 的基礎 TCP 服務 -
協程和併發
tornado.gen — Simplify asynchronous code
tornado.concurrent — Work with threads and futures
tornado.locks – 同步原語
tornado.queues – 協程的隊列
tornado.process — Utilities for multiple processes -
與其他服務集成
tornado.auth — Third-party login with OpenID and OAuth
tornado.wsgi — Interoperability with other Python frameworks and servers
tornado.platform.asyncio — Bridge between asyncio and Tornado
tornado.platform.caresresolver — Asynchronous DNS Resolver using C-Ares
tornado.platform.twisted — Bridges between Twisted and Tornado -
通用工具
tornado.autoreload — Automatically detect code changes in development
tornado.log — Logging support
tornado.options — Command-line parsing
tornado.stack_context — Exception handling across asynchronous callbacks
tornado.testing — Unit testing support for asynchronous code
tornado.util — General-purpose utilities
Hello Tornado
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpserver
# 從命令行中讀取設置
from tornado.options import define,options
define('port',default=8000,help='run on the given port',type=int)
# 定義處理類型
class IndexHandler(tornado.web.RequestHandler):
def get(self):
# 查詢字符串中取得參數greeting的值。
greeting = self.get_argument('greeting', 'Hello')
# 以一個字符串作爲函數的參數,並將其寫入到HTTP響應中。
self.write('hello Tornado')
if __name__ == '__main__':
# tornado.ioloop.IOLoop.instance().close()
# 解析命令行
tornado.options.parse_command_line()
#創建了一個Application類的實例。傳遞給Application類init方法的最重要的參數是handlers。
# 它告訴Tornado應該用哪個類來響應請求
#參數handlers它應該是一個元組組成的列表,其中每個元組的第一個元素是一個用於匹配的正則表達式,
# 第二個元素是一個RequestHanlder類。
app = tornado.web.Application(handlers=[(r'/', IndexHandler)])
# httpserver 監聽端口
http_servr = tornado.httpserver.HTTPServer(app)
http_servr.listen(options.port)
# 啓動web程序,開始監聽端口的連接
tornado.ioloop.IOLoop.instance().start()