tornado原始碼閱讀 Application篇

2021-06-21 12:53:09 字數 3371 閱讀 9810

從tornado的官方文件中,我們能夠知道對於tornado來說最主要的幾個模組主要是web、httpclient、httpserver、iostream和ioloop這幾個模組。所以現在我們可以按照順序來庖丁解牛。

tornado框架設計模型

在深入到模組進行分析之前,首先來看看tornado的設計模型。

神奇的hello world

首先,我們還是從最神奇的demo中來開始,一步一步來看看,這個程式是怎麼來執行的。

import tornado.ioloop

import tornado.web

class mainhandler(tornado.web.requesthandler):

def get(self):

self.write("hello, world")

(r"/", mainhandler),

])if __name__ == "__main__":

tornado.ioloop.ioloop.instance().start()

在這個demo中,最重要的是

class

(object):

def__init__

(self

,handlers

=none

,default_host=""

,transforms

=none,

wsgi

=false,**

settings):

/*********

這些都是一些初始化的操作,可以省略。。。

最主要的是檢視呼叫下面self.add_handlers來處理  

handlers = [

[(r"/", mainhandler), 

)]

**********/

self

.handlers=

self

.named_handlers={}

ifhandlers:

self

.add_handlers

(".*$"

,handlers

)     #初始化一下根據不用的url呼叫不同的

#requesthandler類,具體下面有解釋

)      #啟動的還是tornado預設的內嵌服務

server

.listen

(port

,address)

efadd_handlers

(self

,host_pattern

,host_handlers

):  #這個函式主要是做個路由功能,

#初始化一下根據不用的url呼叫不同函式                if

nothost_pattern

.endswith

("$"):

host_pattern

+="$"

handlers=

ifself

.handlers

andself

.handlers[-

1][0]

.pattern

=='.*$':

self

.handlers

.insert(-

1,(re

.compile

(host_pattern

),handlers))

else:

self

.handlers.((

re.compile

(host_pattern

),handlers))

forspec

inhost_handlers:

ifisinstance

(spec,(

tuple

,list

)):

assert

len(

spec)in

(2,3

,4)

spec

=urlspec(*

spec)

handlers.(

spec)

ifspec

.name:

ifspec

.name

inself

.named_handlers:

.warning(

"multiple handlers named

%s; replacing previous value",

spec

.name)

self

.named_handlers

[spec

.name]=

spec

#這一部分主要是把傳入的handlers傳入的乙個處理,

#根據debug資訊,處理的結果如下:

#第二部分:

這個部分主要是呼叫

httpserver物件進行監聽.

直接上原始碼:

ok,這部分初始化完了,主要是根據執行一步一步的抽絲剝繭,下一步的應該是去剖析

httpserver這個類物件了。

email: [email protected]

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

原始碼閱讀 Glide原始碼閱讀之with方法(一)

前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...

原始碼閱讀 Glide原始碼閱讀之load方法(二)

原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 首先,load方法有以下幾個過載方法 public requestbuilder load nullable bitmap bitmap public requestbuilder load nu...