本系列博文計劃:
1、剖析基于Python的Web架構Tornado的源碼
2、為Python開發一個完善的MVC架構
首先将帶着大家一起來剖析基于python編寫的Web架構 tornado ,本着易讀易懂的目标來寫這一系列,寄希讓小白也能zeng明白其中的道理,與其說剖析還不如說是白話,因為本系列都會用通俗的語言去描述Web架構中的各個知識點。
一個腳本引發的一場“血案”....
運作腳本并在浏覽器上通路http://127.0.0.1:8080
#!/usr/bin/env python
#coding:utf-8
import socket
def handle_request(client):
buf = client.recv(1024)
client.send("HTTP/1.1 200 OK\r\n\r\n")
client.send("Hello, Seven")
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost',8080))
sock.listen(5)
while True:
connection, address = sock.accept()
handle_request(connection)
connection.close()
if __name__ == '__main__':
main()
注意:對于上述的demo來說,我們沒有對請求做分析,對所有的請求都做了相同的處理。
上述分析:
1、浏覽器其實就是一個socket用戶端,而web應用其實就是一個socket服務端,并且web應用在伺服器上一直在監聽某個端口。
2、當浏覽器請求某個web應用時,需要指定伺服器的IP(DNS解析)和端口建立一個socket連接配接。
3、建立連結後,web應用根據請求的不同,給使用者傳回相應的資料。
4、斷開socket連接配接。(之是以說http是短連結,其實就是因為每次請求完成後,伺服器就會斷開socket連結)
對于Web架構來說,一般分為兩類,其中一類則是包含上述 4部分 内容的架構,另外一類就是隻包含 第3部分 功能的架構。tornado就是一中屬于前者的架構。tornado 是一個基于 Python 開發的web架構,較其他 Web 架構的差別是:采用了非阻塞的方式和對epoll的應用。這意味着對于實時 Web 服務來說,Tornado 是一個理想的 Web 架構。
初識tornado
上述用一個簡陋的demo展示了Web請求從浏覽器到伺服器之間的流程,接下來就以上帝視角來對tornado架構做一個全局的介紹。在使用tornado之前需要安裝,對于如何安裝這裡不做太多贅述,詳見官網
經典的hello world 案例:
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/index", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
運作該腳本,依次執行:
- 建立一個Application對象,并把一個正規表達式'/'和類名MainHandler傳入構造函數:tornado.web.Application(...)
- 執行Application對象的listen(...)方法,即:application.listen(8888)
- 執行IOLoop類的類的 start() 方法,即:tornado.ioloop.IOLoop.instance().start()
整個過程其實就是在建立一個socket服務端并監聽8888端口,當請求到來時,根據請求中的url和請求方式(post、get或put等)來指定相應的類中的方法來處理本次請求,在上述demo中隻為url為http://127.0.0.1:8888/index的請求指定了處理類MainHandler(具體如何尋找見下文)。是以,在浏覽器上通路:http://127.0.0.1:8888/index,則伺服器給浏覽器就會傳回 Hello,world ,否則傳回 404: Not Found(tornado内部定義的值), 即完成一次http請求和響應。
由上述分析,我們将整個Web架構分為兩大部分:
- 待請求階段,即:建立服務端socket并監聽端口
- 處理請求階段,即:當有用戶端連接配接時,接受請求,并根據請求的不同做出相應的相應
那麼在記下來的博文中将按照這兩種分類來進行剖析...

作者:武沛齊
出處:http://www.cnblogs.com/wupeiqi/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。