1. 程式人生 > >Tornado開發(一)—— 概述及構成

Tornado開發(一)—— 概述及構成

一.概述

Tornado是用python寫的非同步web架構庫,幾行程式碼就可以寫出httpsever和WebSocket server,它是採用python構建 web服務的幾種流行的架構之一。

關於Tornado與Django的區別,網文很多,不再描述,筆者選擇Tornado而不是Django的主要原因同樣是Django包攬太多,靈活度小,而Tornado比較適合中小性網站(不是從效能上講),這是筆者應用的領域。

二.環境部署

Tornado的安裝比較簡單,它是純python程式碼,聯網安裝可用pipinstall tornado完成,或原始碼下載後,執行python setup.py install完成。

本文的示例在ubunt17.10+python3.6.3下完成。

雖然Tornado是非同步web架構,但其預設的執行方式是單程序單執行緒,如果處理流程中有一個環節是阻塞的,則整個處理流程的效率就大打折扣了,而檔案操作、資料庫操作多是同步的(或非同步操作難於編寫和除錯),因此筆者認為多程序的執行方式是Tornado的主要方式。

將Tornado web server多程序執行,可以利用Nginx作代理,然後進行分發,多程序執行後,會話/狀態管理是必需的,一般由redis來完成。

因此,如果是比較完整的應用,應安裝python, tornado,openssl,nginx和redis。

 三.主要構成

 1.      概述

Tornado是一個非同步網路庫以及基於此之上的web架構庫,因此它包含四個部分:

  • 一套適應web應用開發的框架,以這個架構可很快構建web應用;
  • 涉及web應用的http協議和websocket協議的實現(客戶端/伺服器端);
  • 非阻塞的非同步網路通訊庫;
  • 非同步操作的協程(coroutine)庫。

Tornado雖然支援WSGI,但有限制,本文不涉及與其他應用的整合。

2. Application等類

Application看起來像是引數集合類,在應用啟動時初始化,接受大量引數,比如最重要的url路由規則定義,web執行引數等。

HTTPServer類看起來是執行類,它可以將Application作為自己的引數。Application也可以建立HTTPServer並執行。

         IOLoop類就是訊息迴圈、分發,是程式真正的阻塞點。

         幾個類大致的關係如下圖,在一個應用中,這幾個類構成基本的執行框架,它們都是單例項執行。


3. RequestHandler類

RequestHandler是頁面的響應類,也就是業務處理的起點和終點。一般情況下,每個頁面對應一個類。按照面向物件的觀點,所有頁面類應置於某個基類之下,這樣所有公共的業務都可在該基類中處理,這個我們自己設計的基類同時也是RequestHandler的子類。

對HTTP request的處理,常用功能大致分為以下幾類(也是RequestHandler類函式的分類):

  • 對header(包括querystring)的處理:包括若干get和set
  • 對body的處理(POST):對get,可用get_body_argument,對set,實際上就是應答了,可用write,還包括模板的管理
  • 對cookie的處理:包括若干get和set,個人感覺加密方式不常用,用伺服器端儲存敏感內容可適應大多數場景
  • 轉向redirect:跳轉redirect

4. 錯誤處理

如果程式發生可預見的錯誤,可raise tornado.web.HTTPError來終止處理,RequestHandler.write_error被呼叫,產生錯誤資訊傳送給客戶端。在debug模式下,預設的錯誤是產生500錯誤併產生堆疊追蹤資訊。

通常,我們需要定製錯誤頁版式,此時,需要重寫我們自己設計的頁面基類(見上面描述)的write_error方法。

如果某個頁面需要與通常的錯誤處理不同,可以raise tornado.web. Finish來終止處理,,此時就不會呼叫write_error方法,但在raise之前,將需要傳送給客戶端的內容(特別的錯誤頁)設定好,finish的意思就是結束處理併發送快取(如果有)。

關於404錯誤的定製,與上面稍有不同,先定義一個類:

class My404Handler(RequestHandler):
    # Override prepare() instead of get() to cover all possible HTTP methods.
    def prepare(self):
        self.set_status(404)
        self.render("404.html")

然後在Application類的設定中,新增default_handler_class=My404Handler即可,凡不能被url路由規則處理的請求,都由My404Handler處理。

相關推薦

Tornado開發—— 概述構成

一.概述Tornado是用python寫的非同步web架構庫,幾行程式碼就可以寫出httpsever和WebSocket server,它是採用python構建 web服務的幾種流行的架構之一。關於Tornado與Django的區別,網文很多,不再描述,筆者選擇Tornado

Java單元測試工具:JUnit4——概述簡單例子

(一)JUnit概述及一個簡單例子         看了慕課網的JUnit視訊教程: http://www.imooc.com/learn/356,總結筆記。         這篇筆記記錄JUnit的

如何用 Java 對 PDF 檔案進行電子簽章概述技術選型

參考: 一、 概述   印章是我國特有的歷史文化產物,古代主要用作身份憑證和行駛職權的工具。它的起源是由於社會生活的實際需要。早在商周時代,印章就已經產生。如今的印章已成為一種獨特的,融實用性和藝術性為一體的藝術瑰寶。傳統的印章容易被壞人、小人私刻;從而新聞鮮

【轉】Nodejs學習筆記--- 簡介安裝Node.js開發環境

ack 目錄 javascrip 難度 時間 網站開發 clas jetbrains 常用 目錄 學習資料 簡介 安裝Node.js npm簡介 開發工具 Sublime Node.js開發環境配置 擴展:安裝多版本管理器 學習資料   1.深入淺出Node.j

即時通訊音視訊開發:視訊編解碼之理論概述

前言 即時通訊應用中的實時音視訊技術,幾乎是IM開發中的最後一道高牆。原因在於:實時音視訊技術 = 音視訊處理技術 + 網路傳輸技術 的橫向技術應用集合體,而公共網際網路不是為了實時通訊設計的。 系列文章 《即時通訊音視訊開發(二):視訊編解碼之數字視訊介紹》 《即時通訊音

jsp概述伺服器配置

一、概述 java除了可以做程式,也可以進行一些前端的開發,通過jsp網頁與Servlet服務端程式設計,實現動態網頁。而進行服務端程式設計時需要藉助伺服器,就像在之前博文中寫的Client類一樣,在本例項中使用的是Tomca伺服器。前端伺服器有很多種,現在在研發時使用的比較廣泛的伺服器就是To

動態桌布開發指南概述介紹

一、概述 1.1 簡介 在Android中,桌布分為靜態與動態兩種。靜態桌布是一張圖片,而動態桌布則以動畫為表現形式,或者可以對使用者的操作作出反應。動態桌布實際上和其他應用是類似的,自Android 2.1開始支援。Android桌布執行在一個Android服

分散式設計與開發------巨集觀概述

在IDF05(Intel Developer Forum 2005)上,Intel執行長Craig Barrett就取消4GHz晶片計劃一事,半開玩笑當眾單膝下跪致歉,給廣大軟體開發者一個明顯的訊號,單純依靠垂直提升硬體效能來提高系統性能的時代已結束,分散式開發的時代實際上早

Nodejs學習筆記--- 簡介安裝Node.js開發環境

目錄 學習資料   2.Node.js開發指南 簡介(只撿了我覺得重要的) Node.js是讓Javascript脫離瀏覽器執行在伺服器的一個平臺,不是語言;Node.js採用的Javascript引擎是來自Google Chrome的V8;執行在瀏覽器外不用考慮頭疼的Java

VS2017環境下GMap的學習開發

我本人自學GMap走了不少彎路,希望這些文章能幫助到大家快速上手! GMap環境配置 下載GMap 開啟官網GMap.net,點選download archive 進行下載並解壓。 執行GMap 找到解壓後的檔案下的目錄:greatmaps\sourceCode\gre

Android Plugin插樁式實現外掛化開發-實現原理Activity外掛化實現

1. 前言在現在一些大型的Android應用中都採用了外掛化的開發方式,比如美團,支付寶及我們常用的微信等採用了插修的化的開發方式來進行開發的,既然國內一流的網際網路公司都採用這樣的方式來開發那它一定能帶給開發部署大型應用帶來很大的便捷,那麼外掛化的優勢在哪裡呢?1.1 外掛

Android 資料庫開發SQLite3概述

前言 SQLite是一款輕型的資料庫,是遵守ACID的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案,設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在Android、iOS等

Exynos4412 中斷驅動開發—— 中斷基礎中斷的註冊過程

一、中斷基礎概念         所謂中斷,指CPU在執行程式的過程中,出現了某些突發事件即待處理,CPU必須暫停當前的程式。轉去處理突發事件,處理完畢後CPU又返回原程式被中斷的位置並繼續執行。 1、中斷分類 a -- 內部中斷和外部中斷       根據中斷的的來源,中

角蜂鳥AI視覺套件:開箱軟體開發環境配置

硬體平臺:角蜂鳥 + 虛擬機器Ubuntu 16.04 + ROS Kinetic  1. 角蜂鳥AI視覺套件開箱及簡要介紹 定位於嵌入式人工智慧感知平臺的觸景無限科技(北京)有限公司,最近推出了一款名為角蜂鳥的AI視覺套件,官網售價699元,我有幸作為體驗者,通過預交押

Android Studio NDKso檔案開發

部落格借鑑: 前言: 1、什麼是NDK? NDK全稱是Native Development Kit,NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。NDK集成了交叉編譯器(交叉編譯器

項目進階 之 集群環境搭建概述

問題 特點 多臺 cpu 好的 content 成了 系統資源 通過 今天我們說一個不是特別新,但近期今年伴隨大數據熱而比較火的一個技術-集群技術。 什麽是集群技術 集群(Cluster)技術是指一組相互犭蟲立的計算機,利用快速通信網絡組

NIO原理剖析與Netty初步----淺談高性能服務器開發

返回 創建 基於 register 訪問 io操作 nbsp info class 除特別註明外,本站所有文章均為原創,轉載請註明地址 在博主不長的工作經歷中,NIO用的並不多,由於使用原生的Java NIO編程的復雜性,大多數時候我們會選擇Netty,m

spring之註解概述

dsm 的人 src article service 優缺點 中一 auto 數據 Spring的核心是依賴註入(DI),而依賴註入的基礎是依賴信息的配置。這些配置稱之為元數據。在之前的的學習中。一直採用的是基於xml的配置,這些元數據配置在spring內部被註冊成為B

淺談WebService開發

man att set style 訪問 row nag 序列 ros 一、什麽是WebService: 簡單通俗來說,就是企業之間、網站之間通過Internet來訪問並使用在線服務,一些數據,由於安全性問題,不能提供數據庫給其他單位使用,這時候可以使

微信公眾號開發

jpg 解壓 china arc 公眾平臺 開發 技術分享 更換 微信公眾號 4.1 示例代碼設置 首先下載此處的php接入代碼 ,在公眾號中 配置 url 地址指向 文件 代碼 只需更換 自定義的token 即可 這樣就完成最初的接入 微信公眾平臺提供了一個php示例