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