Tornado 6 0 3原始碼分析之前述

2021-10-04 18:23:36 字數 2216 閱讀 4376

web框架相關

template.py 包含的是提供靈活的對外輸出的模版實現

escape.py 是對網路字元轉碼相關的實現

locale.py 是web頁面進行國際化翻譯的實現

websocket.py 是對於websocket通訊的支援

http 客戶端和服務端相關

非同步網路定義

其它服務的融合

其它公共操作

在**實現層面上,其框架設計類圖如下所示。雖然不是每個相關類都體現出來了。但是整體來說,是沒有太大差別的。(ps:後面再回來補充相關的整體類圖說明)

此圖**自:

可以看到,這是乙個向上的層級服務實現。最底下的io event事件進行網路資料的讀寫,通過再次包裝成iostream類後,為tcp傳輸層服務,而http協議建立在tcp之上,最上面的使用者層是web應用層,涉及到web搭建的各個方面。

在學習介紹tornado相關的例子前,先來看一下,乙個普通的網路伺服器的框架樣子。

import socket

sock = socket.socket(socket.af_inet, socket.sock_stream,0)

sock.setsockopt(socket.sol_socket, socket.so_reuseaddr,1)

sock.setblocking(0)

sock.bind("",

8888

)sock.listen(

128)

while

true

:try

: connection, address = sock.accept(

) connection.sendall(

"hello world"

) connection.close(

)except blockingioerror:

return

這是乙個典型的阻塞式的tcp服務端。所需要完成的步驟是:

1 建立乙個socket例項,sock = socket.socket(socket.af_inet, socket.sock_stream, 0)

2 設定該sock例項的引數,如埠可復用等,sock.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

3 繫結特定的本地埠和位址,sock.bind("", 8888)

4 設定最大監聽緩衝長度,sock.listen(128)

5 等待客戶端的連線,connection, address = sock.accept()

6 與該客戶端進行資料互動處理,在這裡只是由服務端傳送了乙個"hello world", connection.sendall(「hello world」)

7 處理結束,關閉該客戶端,繼續等待下乙個客戶端。connection.close()

這些步驟就是乙個處理tcp連線的主要操作。而這個伺服器的實現缺陷也是很明顯的。比如,程式只能阻塞等待,而不能做其它事情,這就造成了資源浪費;對於資料的處理過程也是不具備可擴充套件性,如果要新增其它處理過程,就是修改到原來的**等等;那麼tornado庫,在網路處理方面就是優化實現了這些,把阻塞的等待變成了非同步的網路監聽,在監聽到有新的連線時,再「啟用處理」;下面先簡單看下tornado提供的簡單例子。

import tornado.ioloop

import tornado.web

class

mainhandler

(tornado.web.requesthandler)

:def

get(self)

: self.write(

"hello, world"

)if __name__ ==

"__main__":[

(r"/"

, mainhandler),]

)8888

) tornado.ioloop.ioloop.current(

).start(

)

從這個例子我們可以看到,在功能實現和操作方面,tornado整體實現上就是簡化了網路連線相關的操作,提供了方面的可拓展的web應用程式,而於如何建立網路連線、如何接收客戶端資料、資料是如何提交出來給使用者處理的等等,這些細節,對於庫的使用者,是不必關心的。但是對於原始碼檢視分析,這些才是關鍵。

這篇裡面,主要是初步接觸tornado庫,基本了解一下tornado。

tornado原始碼閱讀 Application篇

從tornado的官方文件中,我們能夠知道對於tornado來說最主要的幾個模組主要是web httpclient httpserver iostream和ioloop這幾個模組。所以現在我們可以按照順序來庖丁解牛。tornado框架設計模型 在深入到模組進行分析之前,首先來看看tornado的設計...

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...