(1) 調用HTTPServer的bind方法,綁定Socket的監聽端口號;數據庫
(2) 調用HTTPServer的listen方法,初始化一個listen socket對象;服務器
(3) 調用add_hander方法,將初始化的listen socket對象添加至IOLoop池中,這時的socket就開始監聽來自客戶端的請求。socket
(4) 客戶端發送HTTP請求;oop
(5) listen socket監聽到客戶端的請求,調用listen socket的accept方法,表示開始接收請求;同時從新生成一個新的socket,爲了區分,叫作client socket。post
(6) IOLoop回調HTTPServer的 handle_stream方法;網站
(7) handle_stream初始化HTTP1ServerConnection對象,並將其添加至池中;spa
(8) 調用HTTP1ServerConnection的start_serve方法,開始處理請求,初始化IOStream、HTTP1Connection對象,同時初始化_RequestDispater請求分發器。對象
(9) _RequestDispater請求分發器初始化HttpServerRequest對象,請根據Application配置的映射設置hanlder_class以及handler_kwargs等屬性。blog
(10) HTTP1Connection讀取請求的信息,好比請求頭,請求體等信息。接口
(11) 解析讀取的請求頭、請求體數據塊信息,供自定義的RequestHandler調用。
(12) 調用自定義的RequestHandler的相關的方法,好比get、post。
(13) 將處理的結果(通常爲RequestHandler的render方法返回)返回給HTTP1Connection;
(14) HTTP1Connection將Response寫入到IOStream流中;
(15) client socket將流返回給客戶端。
其中:
HTTPServerConnectionDelegate、HTTPMessageDelegate爲接口。IOStream、IOLoop、Application、HTTPServer、RequestHandler、HTTPServerRequest是Tornado中比較重要的模塊。可是,應用程序開發者通常只針對Application、RequestHandler進行自定義設置與開發,特別是RequestHandler。一個典型的torando應用網站由Application、HTTPServer、以及一序列的RequestHandler組成。
(1) 首先進行初始化RequestHandler對象;
(2) 調用自定義的initialize方法,進行相關的初始化操做,好比數據庫鏈接、各類變量的初始化等等;
(3) 根據Http請求的類型,判斷是否支持該類請求,RequestHandler默認支持的方法包括GET、POST、HEAD、DELETE、PATCH、PUT、OPTIONS;
(4) 若是支持,則調用prepare方法。若是不支持,則結束該流程;
(5) 判斷prepare方法是否對finished屬性設置爲True,若是是,則結束該流程,若是沒有,則轉入下一步。
(6) 調用相應的方法,好比get、post;
(7) 調用write或者render方法;
(8) 判斷finished屬性設置爲True,若是是,則結束該流程,若是沒有,則轉入下一步。
(9) 調用finish方法,將數據寫入返回流中。
(10) 最後調用on_finish方法,釋放相關的資源或變量。