Tornado開發(一) 概述及構成

2021-08-20 17:36:50 字數 1779 閱讀 3264

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

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

本文不是對tornado的系統說明和介紹,而僅是對其關鍵點的一些解釋和筆者的看法,本文的解釋大多來自tornado官**此說明。

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

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

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

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

1.      概述

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

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

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

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

3. requesthandler類

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

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

4. 錯誤處理

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

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

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

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

ios 開發(一)概述

由於ios本質就是乙個嵌入式的平台,所以相對與一般的pc他就有很多限制 1.只允許有乙個active的程式,當然ios5以後也允許在特定的情況下在後台執行一些東西,但是和一般的應用還是有很大的差距。2.只有乙個視窗而且是佔滿了整個螢幕的視窗。3.不可以無條件的訪問所有的系統裡的內容,為了安全只能訪問...

MIPI CSI 2規範一 概述及層級

mipi csi 2規範一 概述及層級 csi 2規範定義了傳送者和接收者之間傳輸和控制介面的標準資料。資料傳輸介面 指csi 2 是單向差分序列介面,傳輸資料和始終訊號 介面的物理層說明文件參見 mipialliance specification for d phy mipi01 圖1描述了cs...

微服務監控和報警 一 概述及docker環境準備

前面我們一直都在學習微服務安全的一些東西,包括微服務本身的api安全 閘道器的安全,安全中心 認證伺服器,許可權服務等 怎麼實現sso,然後學習了阿里的sentinel來實現熔斷限流,這些都是跟服務安全相關的一些知識點。做的都是保證服務不出問題的,但是服務不出問題是不可能的,在服務執行的過程中,肯定...