tornado遠遠不止



大家的回答都有點片面,更多的關注web框架成,其實tornado遠遠不止這些,且聽我慢慢到來
1.高性能的網絡庫,這可以和gevent,twisted,libevent等做對。提供了異步io支持,超時事件處理,在此基礎上提供了tcpserver,httpclient,尤其是curlhttpclient在現有http客戶端中肯定排第一。可以用來做爬蟲,游戲服務器,據我所知業界已有使用tornado作為游戲服務器

2.web框架,這可以和django,flask對。提供了路由,模板等web框架必備組件。與其他區別是tornado是異步的,天然適合長輪訓,這也是friendfeed發明tornado的原因,
當前flask也可以支持,但必須借住gevent等

3.較為完備的http服務器,這點可以和nginx,apache對比,但只支持http1.0,所以使用nginx做前段不僅是為了更好利用多核,也是讓其支持http1.1

4.完備的wsgi服務器,這可以和gunicore,gevent wsgi server做對比,也就是說可以讓flask運行在tornado之上,讓tornado加速flask
5.提供了完備的websocket支持,這讓html5的游戲等提供了便利。像知乎長輪訓就是使用了websocket,但websocket手機支持的不是很好,前段時間不得不使用定時ajax發送大量請求,期待手機瀏覽器趕快奮起直追

tornado,你值得擁有
ornado自帶了一個web服務器,性能不錯,但由於實現簡化了很多功能,建議跑在nginx后面

tornado本身又是一個web框架,但是沒有預先實現很多功能,只保留比較必要的組件,這個和Django就有點相反的思路。
雖然思路相反,但Django其實也是圍繞着一個設計精良的core來實現的,如果單獨把這個core抽取出來其實和Tornado的規模和功能都差不多。它的功能豐富(甚至是復雜)只不過是一種“一站式框架”的理念的體現而已。
簡單來說,就是它們一個是簡約框架,一個是把可能需要的組件都默認配給你的框架。喜歡用哪個看個人愛好。前者的麻煩是遇到某些問題要自己重新實現,后者的麻煩是如果它預置給你的不能滿足要求也要自己重新實現,歸根到底就是找到一個平衡點,盡量方便開發就可以了。

異步方面個人不推薦node.js,js用在服務端還是很少的,很多組件都不齊全,要成熟還得比較久,用Python可以有很多現有的組件使用。

最后,如果關心性能,請嘗試pypy,在Linux下網絡IO方面毫不遜色node.js,不過大部分情況下性能問題都不在Python寫的東西中,而在數據庫

1. 輕框架,從web.py開始,flask,bottle這些都是輕框架,tornado則是輕框架的代表
2. 高性能異步框架,直接基於ioloop寫東西,你就覺得tornado不僅僅是web框架了
3. 隊列服務器,我們實現一個兩級tornado服務器模型,前面的負責web分配和並發,后面負責單線程高cpu計算,輕松解決了單線程高運算量的block問題

WSGI功能可以忽略不計了

理解了tornado的特性之后,我們發現唯一需要和tornado配合的就是nginx,既可以做負載均衡,又可以擋住靜態文件請求。除此以外你還需要個mysql,試試torndb。

使用tornado可以大大的減少web系統中使用的組件數量,用最少的代碼量和極其精簡的架構實現你的系統。


作者:KJ(Kan Jia)
鏈接:https://www.zhihu.com/question/20136991/answer/34851536
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。

作者:郭煜
鏈接:https://www.zhihu.com/question/20136991/answer/19226877
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
作者:羅伊
鏈接:https://www.zhihu.com/question/20136991/answer/34676413
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM