Tornado全稱Tornado Web Server,是一個用Python語言寫成的Web服務器兼Web應用框架,由FriendFeed公司在本身的網站FriendFeed中使用,被Facebook收購之後框架在2009年9月以開源軟件形式開放給大衆。python
特色:nginx
做爲Web框架,是一個輕量級的Web框架,其擁有異步非阻塞IO的處理方式。web
做爲Web服務器,Tornado有較爲出色的抗負載能力,官方用nginx反向代理的方式部署Tornado和其它Python web應用框架進行對比,結果最大瀏覽量超過第二名近40%。數據庫
性能:django
Tornado有着優異的性能。它試圖解決C10k問題,即處理大於或等於一萬的併發。
Tornado框架和服務器一塊兒組成一個WSGI的全棧替代品。單獨在WSGI容器中使用tornado網絡框架或者tornaod http服務器,有必定的侷限性,爲了最大化的利用tornado的性能,推薦同時使用tornaod的網絡框架和HTTP服務器。編程
1,用戶量大,高併發
如秒殺搶購、雙十一某寶購物、春節搶火車票服務器
2,大量的HTTP持久鏈接
使用同一個TCP鏈接來發送和接收多個HTTP請求/應答,而不是爲每個新的請求/應答打開新的鏈接的方法。網絡
對於HTTP 1.0,能夠在請求的包頭(Header)中添加Connection: Keep-Alive。session
對於HTTP 1.1,全部的鏈接默認都是持久鏈接。
併發
Django是走的大而全的方向,注重的是高效開發,
它最出名的是其全自動化的管理後臺:只須要使用起ORM,作簡單的對象定義,它就能自動生成數據庫結構、以及全功能的管理後臺。
Django提供的方便,也意味着Django內置的ORM跟框架內的其餘模塊耦合程度高,應用程序必須使用Django內置的ORM,不然就不能享受到框架內提供的種種基於其ORM的便利。
Tornado走的是少而精的方向,注重的是性能優越,它最出名的是異步非阻塞的設計方式。
import tornado.web import tornado.ioloop class IndexHandler(tornado.web.RequestHandler): """主路由處理類""" def get(self): """對應http的get請求方式""" self.write("Hello Python Tornado!") if __name__ == "__main__": app = tornado.web.Application([ (r"/", IndexHandler), ]) app.listen(8000) tornado.ioloop.IOLoop.current().start()
RequestHandler
封裝了對應一個請求的全部信息和方法,write(響應信息)就是寫響應信息的一個方法;對應每一種http請求方式(get、post等),把對應的處理邏輯寫進同名的成員方法中(如對應get請求方式,就將對應的處理邏輯寫在get()方法中),當沒有對應請求方式的成員方法時,會返回「405: Method Not Allowed」錯誤。
Application
Tornado Web框架的核心應用類,是與服務器對接的接口,裏面保存了路由信息表,其初始化接收的第一個參數就是一個路由信息映射元組的列表;其listen(端口)方法用來建立一個http服務器實例,並綁定到給定端口(注意:此時服務器並未開啓監聽)
tornado的核心io循環模塊,封裝了Linux的epoll和BSD的kqueue,tornado高性能的基石。 以Linux的epoll爲例,其原理以下圖:
詳細圖
IOLoop.current() 返回當前線程的IOLoop實例。
IOLoop.start() 啓動IOLoop實例的I/O循環,同時服務器監聽被打開。