-------------------簡介-------------------
一、概念:
Tornado全稱Tornado Web Server,是一個用Python語言寫成的Web服務器兼Web應用框架,由FriendFeed公司在本身的網站FriendFeed中使用,被Facebook收購之後框架在2009年9月以開源軟件形式開放給大衆。
二、特色:
一、做爲Web框架,是一個輕量級的Web框架,相似於另外一個Python web框架Web.py,其擁有異步非阻塞IO的處理方式。
二、做爲Web服務器,Tornado有較爲出色的抗負載能力,官方用nginx反向代理的方式部署Tornado和其它Python web應用框架進行對比,結果最大瀏覽量超過第二名近40%。
三、性能:
一、Tornado有着優異的性能。它試圖解決C10k問題,即處理大於或等於一萬的併發
二、Tornado框架和服務器一塊兒組成一個WSGI的全棧替代品。單獨在WSGI容器中也能夠使用
三、tornado網絡框架或者tornaod http服務器,有必定的侷限性,爲了最大化的利用
-------------------Tornado與Django的區別-------------------
一、Tornado
一、Tornado走的是少而精的方向,注重的是性能優越,它最出名的是異步非阻塞的設計方式。
二、特色:
一、HTTP服務器:Tornado框架和服務器一塊兒組成一個WSGI的全棧替代品
二、異步編程
三、WebSockets
二、Django
一、Django是走大而全的方向,注重的是高效開發,它最出名的是其全自動化的管理後臺:只須要使用起ORM,作簡單的對象定義,它就能自動生成數據庫結構、以及全功能的管理後臺。
二、Django提供的方便,也意味着Django內置的ORM跟框架內的其餘模塊耦合程度高,應用程序必須使用Django內置的ORM,不然就不能享受到框架內提供的種種基於其ORM的便利。
三、特色:
一、session功能
二、後臺管理
三、ORM
-------------------Tornado安裝
一、查看工做環境中是否安裝
$ pip list
二、安裝對應的tornado環境
一、自動安裝
$ pip install tornado
二、手動安裝
一、下載安裝包tornado-4.3.tar.gz(https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz)
二、$ tar xvzf tornado-4.3.tar.gz
三、$ cd tornado-4.3
四、$ python setup.py build
五、$ sudo python setup.py install
三、安裝對應的數據庫操做環境
$ pip install trondb
-------------------Tornado基本模塊
一、Tornado web 程序編寫思路
一、建立web應用實例對象,第一個初始化參數爲路由映射列表。
二、定義實現路由映射列表中的handler類。
三、建立服務器實例,綁定服務器端口。
四、啓動當前線程的IOLoop。
二、tornado.web
一、RequestHandler:
封裝了對應一個請求的全部信息和方法,write(響應信息)就是寫響應信息的一個方法;對應每一種http請求方式(get、post等),把對應的處理邏輯寫進同名的成員方法中(如對應get請求方式,就將對應的處理邏輯寫在get()方法中),當沒有對應請求方式的成員方法時,會返回「405: Method Not Allowed」錯誤。
二、Application:
Tornado Web框架的核心應用類,是與服務器對接的接口,裏面保存了路由信息表,其初始化接收的第一個參數就是一個路由信息映射元組的列表;其listen(端口)方法用來建立一個http服務器實例,並綁定到給定端口(注意:此時服務器並未開啓監聽)。
三、tornado.ioloop
一、tornado的核心io循環模塊,封裝了Linux的epoll和BSD的kqueue,tornado高性能的基石
二、Linux的epoll原理圖
三、IOLoop.current():
返回當前線程的IOLoop實例。
四、IOLoop.start():
啓動IOLoop實例的I/O循環,同時服務器監聽被打開。
四、tornado.httpserver
實例:
#coding:utf-8
#一個簡單的Tornado web
#引用對應的Tornado包
from tornado.web import Application,RequestHandler
from tornado.ioloop import IOLoop
from tornado.httpserver import HTTPServer
class IndexHandler(RequestHandler):
def get(self):
self.write('hello word!')
if __name__ == '__main__':
#建立一個app應用
app = Application([('/',IndexHandler)])
#app.listen('8000')
#爲應用建立一個http服務
http_server = HTTPServer(app)
#綁定對應的端口號
http_server.listen(8000)
#開啓多個tornado進程
#http_server.bind(8000)
#http_server.start(4)
IOLoop.current().start()
五、tornado.options
一、tornado.options模塊——全局參數定義、存儲、轉換。
二、tornado.options.define()
一、def define(name, default=None, type=None, help=None, metavar=None,
multiple=False, group=None, callback=None):
二、name 選項變量名,須保證全局惟一性,不然會報「Option 'xxx' already defined in ...」的錯誤;
三、default 選項變量的默認值,如不傳默認爲None;
四、type 選項變量的類型,從命令行或配置文件導入參數的時候tornado會根據這個類型轉換輸入的值,轉換不成功時會報錯,能夠是str、float、int、datetime、timedelta中的某個,若未設置則根據default的值自動推斷,若default也未設置,那麼再也不進行轉換。能夠經過利用設置type類型字段來過濾不正確的輸入。
五、multiple 選項變量的值是否能夠爲多個,布爾類型,默認值爲False,若是multiple爲True,那麼設置選項變量時值與值之間用英文逗號分隔,而選項變量則是一個list列表(若默認值和輸入均未設置,則爲空列表[])。
六、help 選項變量的幫助提示信息,在命令行啓動tornado時,經過加入命令行參數 --help 能夠查看全部選項變量的信息(注意,代碼中須要加入tornado.options.parse_command_line())。
三、tornado.options.options
全局的options對象,全部定義的選項變量都會做爲該對象的屬性。
四、tornado.options.parse_command_line()
一、進行對應的初始化
五、tornado.options.parse_config_file(path)
六、實例
#coding:utf-8
#一個簡單的Tornado web
#引用對應的Tornado包
from tornado.web import Application,RequestHandler
from tornado.ioloop import IOLoop
from tornado.httpserver import HTTPServer
import tornado.options
tornado.options.define("port",type=int,help="端口號")
class IndexHandler(RequestHandler):
def get(self):
self.write('hello word!')
if __name__ == '__main__':
tornado.options.parse_command_line()
#建立一個app應用
app = Application([('/',IndexHandler)])
#app.listen('8000')
#爲應用建立一個http服務
http_server = HTTPServer(app)
#綁定對應的端口號
http_server.listen(tornado.options.options.port)
#開啓多個tornado進程
#http_server.bind(8000)
#http_server.start(4)
IOLoop.current().start()