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...