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