Tornado介绍
文章目錄
- 特點
- 結(jié)構(gòu)
- Tornado實現(xiàn)異步原理
- 模塊
- Tornado服務(wù)器的三個底層核心模塊
- 設(shè)計模型
Tornado龍卷風(fēng)是一個開源的網(wǎng)絡(luò)服務(wù)器框架,它是基于社交聚合網(wǎng)站FriendFeed的實時信息服務(wù)開發(fā)而來的
- Tornado是使用Python編寫的Web服務(wù)器兼Web應(yīng)用框架
- 與主流Web服務(wù)器框架不同的是,Tornado是異步非阻塞式服務(wù)器,得益于非阻塞式和對epoll模型的運用
- Tornado是實時Web服務(wù)的一個理想框架,它非常適合開發(fā)長輪詢、WebSocket和需要與每個用戶建立持久連接的應(yīng)用
特點
-
輕量級Web框架
-
異步非阻塞IO處理方式
-
Tornado采用的單進程單線程異步IO的網(wǎng)絡(luò)模式,其高性能源于Tornado基于Linux的Epoll(UNIX為kqueue)的異步網(wǎng)絡(luò)IO
-
出色的抗負(fù)載能力
-
不依賴多進程或多線程
-
WSGI全棧替代產(chǎn)品
WSGI把應(yīng)用(Application)和服務(wù)器(Server)結(jié)合起來,Tornado既可以是WSGI應(yīng)用也可以是WSGI服務(wù) -
既是WebServer也是WebFramework
Tornado是基于Bret Taylor和其他人員為FrientFeed所開發(fā)的網(wǎng)絡(luò)服務(wù)框架,當(dāng)FriendFeed被Facebook收購后得以開源。不同于那些最多只能達到1w并發(fā)連接的傳統(tǒng)網(wǎng)絡(luò)服務(wù)器。Tornado在設(shè)計之初就考慮到了性能因素,旨在解決C10K問題,這樣的設(shè)計使其成為一個擁有高性能的框架
結(jié)構(gòu)
- Web框架
主要包括RequestHandler用于創(chuàng)建Web應(yīng)用程序和各種支持類的子類 - HTTP服務(wù)器與客戶端
主要包括HTTPServer和AsyncHTTPClient - 異步網(wǎng)絡(luò)庫
主要包括IOLoop和IOStream作為HTTP組件的構(gòu)建塊 - 協(xié)程庫
Tornado的Web框架和HTTP服務(wù)器一起提供了完整的堆棧替代方案WSGI
Tornado實現(xiàn)異步原理
注1:yield 一個 Future對象,那么Tornado會等待,直到執(zhí)行future.set_result(’…’)才會釋放
注2:epoll實質(zhì)是不斷的輪詢所負(fù)責(zé)的所有socket,當(dāng)某個socket有數(shù)據(jù)到達了,就通知用戶進程
Tornado實現(xiàn)異步非阻塞舉例
模塊
Tornado是一個輕量級框架,它的模塊不多最重要的模塊是web,web模塊包含了Tornado大部分主要功能的Web框架,其他模塊都是工具性質(zhì)的,以便讓W(xué)eb模塊更加有用。
Core Web Framework 核心Web框架
- tornado.web 包括Web框架大部分主要功能,包括RequestHandler和Application類
- tornado.httpserver一個無阻塞HTTP服務(wù)器的實現(xiàn)
- tornado.template模板系統(tǒng)
- tornado.escape HTML、JSON、URLs等編碼解碼和字符串操作
- tornado.locale國際化支持
Asynchronous Networking 異步網(wǎng)絡(luò)底層模塊
- tornado.ioloop 核心IO循環(huán)
- tornado.iostream對非阻塞的Socket的簡單封裝以方便常用讀寫操作
- tornado.httpclient無阻塞的HTTP服務(wù)器實現(xiàn)
- tornado.netutil網(wǎng)絡(luò)應(yīng)用的實現(xiàn)主要是TCPServer類
Integration With Other Services 系統(tǒng)集成服務(wù)
- tornado.auth 使用OpenId和OAuth進行第三方登錄
- tornado.databaseMySQL服務(wù)端封裝
- tornado.platform.twisted在Tornado上運行Twisted實現(xiàn)的代碼
- tornado.websocket實現(xiàn)和瀏覽器的雙向通信
- tornado.wsgi其他Python網(wǎng)絡(luò)框架或服務(wù)器的相互操作
Utilities 應(yīng)用模塊
- tornado.autoload產(chǎn)生環(huán)境中自動檢查代碼更新
- tornado.gen基于生成器的接口,使用該模塊 保證代碼異步運行
- tornado.httputil分析HTTP請求內(nèi)容
- tornado.options解析終端參數(shù)
- tornado.process多進程實現(xiàn)的封裝
- tornado.stack_context異步環(huán)境中對回調(diào)函數(shù)上下文保存、異常處理
- tornado.testing單元測試
Tornado服務(wù)器的三個底層核心模塊
- httpserver 服務(wù)于web模塊的一個簡單的HTTP服務(wù)器的實現(xiàn)
Tornado的HTTPConnection類用來處理HTTP請求,包括讀取HTTP請求頭、讀取POST傳遞的數(shù)據(jù),調(diào)用用戶自定義的處理方法,以及把響應(yīng)數(shù)據(jù)寫給客戶端的socket
- iostream 對非阻塞式的socket的封裝以便于常見讀寫操作
為了在處理請求時實現(xiàn)對socket的異步讀寫,Tornado實現(xiàn)了IOStream類用來處理socket的異步讀寫
- ioloop 核心的I/O循環(huán)
Tornado為了實現(xiàn)高并發(fā)和高性能,使用了一個IOLoop事件循環(huán)來處理socket的讀寫事件,IOLoop事件循環(huán)是基于Linux的epoll模型,可以高效地響應(yīng)網(wǎng)絡(luò)事件,這是Tornado高效的基礎(chǔ)保證
設(shè)計模型
Tornado不僅僅是一個Web框架,它完整地實現(xiàn)了HTTP服務(wù)器和客戶端,再此基礎(chǔ)上提供了Web服務(wù),它可分為四層:
-
Web框架:最上層,包括處理器、模板、數(shù)據(jù)庫連接、認(rèn)證、本地化等Web框架所需功能
-
HTTP/HTTPS層:基于HTTP協(xié)議實現(xiàn)了HTTP服務(wù)器和客戶端
-
TCP層:實現(xiàn)TCP服務(wù)器負(fù)責(zé)數(shù)據(jù)傳輸
-
Event層:最底層、處理IO事件
使用Tornado可以方便地架構(gòu)出各種類型的web服務(wù)器,以HTTP服務(wù)器為例來分析下web服務(wù)器的工作方式
一個請求處理的處理過程 -
服務(wù)器綁定bind到特定端口port,然后開始監(jiān)聽listen客戶端的請求
-
當(dāng)客戶端連接connect到來時,會將請求發(fā)送給服務(wù)器
-
服務(wù)器處理請求完畢后返回響應(yīng)結(jié)果給客戶端
當(dāng)需要處理成千上萬的連接的時候,就會遇到典型的The C10K Program問題,常見的解決方案有
- 一個線程服務(wù)多個客戶端,使用非阻塞I/O和水平觸發(fā)的就緒通知
- 一個線程服務(wù)多個客戶端,使用非阻塞I/O和就緒改變時通知
- 一個服務(wù)線程服務(wù)于多個客戶端,使用異步I/O
- 一個服務(wù)線程服務(wù)于一個客戶端,使用阻塞I/O
- 將服務(wù)代碼編譯進內(nèi)核
Tornado采用的方式是“多進程 + 非阻塞 + epoll模式”
總結(jié)
- 上一篇: Elasticsearch介绍
- 下一篇: Tornado基本使用