Tornado框架01-高性能簡介

01-簡介

Tornado全稱Tornado Web Server,是一個用Python語言寫成的Web服務器兼Web應用框架,由FriendFeed公司在自己的網站FriendFeed中使用,被Facebook收購以後框架在2009年9月以開源軟件形式開放給大衆。

特點:

  • 作爲Web框架,是一個輕量級的Web框架,其擁有異步非阻塞IO的處理方式。
  • 作爲Web服務器,Tornado有較爲出色的抗負載能力,官方用nginx反向代理的方式部署Tornado和其它Python web應用框架進行對比,結果最大瀏覽量超過第二名近40%。

性能:

  • Tornado有着優異的性能。它試圖解決C10k問題,即處理大於或等於一萬的併發。
    Tornado框架和服務器一起組成一個WSGI的全棧替代品。單獨在WSGI容器中使用tornado網絡框架或者tornaod http服務器,有一定的侷限性,爲了最大化的利用tornado的性能,推薦同時使用tornaod的網絡框架和HTTP服務器。

02-應用場景

用戶量大,高併發

如秒殺搶購、雙十一某寶購物、春節搶火車票

大量的HTTP持久連接

使用同一個TCP連接來發送和接收多個HTTP請求/應答,而不是爲每一個新的請求/應答打開新的連接的方法。

對於HTTP 1.0,可以在請求的包頭(Header)中添加Connection: Keep-Alive。

對於HTTP 1.1,所有的連接默認都是持久連接。

03-Tornado與Django

Django

Django是走大而全的方向,注重的是高效開發,它最出名的是其全自動化的管理後臺:只需要使用起ORM,做簡單的對象定義,它就能自動生成數據庫結構、以及全功能的管理後臺。

Django提供的方便,也意味着Django內置的ORM跟框架內的其他模塊耦合程度高,應用程序必須使用Django內置的ORM,否則就不能享受到框架內提供的種種基於其ORM的便利。

  • session功能
  • 後臺管理
  • ORM

Tornado

Tornado走的是少而精的方向,注重的是性能優越,它最出名的是異步非阻塞的設計方式。

  • HTTP服務器
  • 異步編程
  • WebSockets

04-簡單的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()

以上代碼解釋說明:

tornado的基礎web框架模塊

  • RequestHandler
    封裝了對應一個請求的所有信息和方法,write(響應信息)就是寫響應信息的一個方法;對應每一種http請求方式(get、post等),把對應的處理邏輯寫進同名的成員方法中(如對應get請求方式,就將對應的處理邏輯寫在get()方法中),當沒有對應請求方式的成員方法時,會返回“405: Method Not Allowed”錯誤。

  • Application
    Tornado Web框架的核心應用類,是與服務器對接的接口,裏面保存了路由信息表,其初始化接收的第一個參數就是一個路由信息映射元組的列表;其listen(端口)方法用來創建一個http服務器實例,並綁定到給定端口(注意:此時服務器並未開啓監聽)

05-Tornado核心IOLoop循環模塊

tornado的核心io循環模塊,封裝了Linux的epoll和BSD的kqueue,tornado高性能的基石。 以Linux的epoll爲例,其原理如下圖:

image
再詳細一點的圖解釋:
image

  • IOLoop.current() 返回當前線程的IOLoop實例。
  • IOLoop.start() 啓動IOLoop實例的I/O循環,同時服務器監聽被打開。

06-Tornado Web程序編寫思路

  • 創建web應用實例對象,第一個初始化參數爲路由映射列表。
  • 定義實現路由映射列表中的handler類。
  • 創建服務器實例,綁定服務器端口。
  • 啓動當前線程的IOLoop。
發佈了48 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章