01初始tornado

1,簡介

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

特點:

作為Web框架,是一個輕量級的Web框架,其擁有異步非阻塞IO的處理方式。

作為Web服務器,Tornado有較為出色的抗負載能力,官方用nginx反向代理的方式部署Tornado和其它Python web應用框架進行對比,結果最大瀏覽量超過第二名近40%。

性能:

Tornado有著優(yōu)異的性能。它試圖解決C10k問題,即處理大于或等于一萬的并發(fā)。

Tornado框架和服務器一起組成一個WSGI的全棧替代品。單獨在WSGI容器中使用tornado網絡框架或者tornaod http服務器,有一定的局限性,為了最大化的利用tornado的性能,推薦同時使用tornaod的網絡框架和HTTP服務器。

2,應用場景

1,用戶量大,高并發(fā)

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

2,大量的HTTP持久連接

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

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

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

3, Tornado與Django

Django

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

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

session功能

后臺管理

ORM

Tornado

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

HTTP服務器

異步編程

WebSockets

4,簡單的Tornado案例

import tornado.web

import tornado.ioloop

class IndexHandler(tornado.web.RequestHandler):

"""主路由處理類"""

def get(self):

"""對應http的get請求方式"""

self.write("Hello Python!")

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框架的核心應用類,是與服務器對接的接口,里面保存了路由信息表,其初始化接收的第一個參數(shù)就是一個路由信息映射元組的列表;其listen(端口)方法用來創(chuàng)建一個http服務器實例,并綁定到給定端口(注意:此時服務器并未開啟監(jiān)聽)

5,Tornado核心IOLoop循環(huán)模塊

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

這里寫圖片描述

再詳細一點的圖解釋:

這里寫圖片描述

IOLoop.current() 返回當前線程的IOLoop實例。

IOLoop.start() 啟動IOLoop實例的I/O循環(huán),同時服務器監(jiān)聽被打開。

6,Tornado Web程序編寫思路

1,創(chuàng)建web應用實例對象,第一個初始化參數(shù)為路由映射列表。

2,定義實現(xiàn)路由映射列表中的handler類。

3,創(chuàng)建服務器實例,綁定服務器端口。

4,啟動當前線程的IOLoop。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,823評論 6 427
  • 環(huán)境管理管理Python版本和環(huán)境的工具。p–非常簡單的交互式python版本管理工具。pyenv–簡單的Pyth...
    MrHamster閱讀 3,949評論 1 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,769評論 25 709
  • GitHub 上有一個 Awesome - XXX 系列的資源整理,資源非常豐富,涉及面非常廣。awesome-p...
    若與閱讀 19,305評論 4 417

友情鏈接更多精彩內容