1. 程式人生 > >Tornado框架簡介

Tornado框架簡介

給定 uil packages .org OS 簡單 下載 ace ket

-------------------簡介-------------------
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環境

1、自動安裝
$ 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框架簡介