Tornado框架簡介

-------------------簡介-------------------
一、概念:
    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()
相關文章
相關標籤/搜索