引言:第四章講解的有些亂,主要是代碼太長了,而且還是在一章就講完了,所以我決定將IOStream上層的HTTPServer類分作幾章來講,不按照代碼順序
在講完了IOLoop和IOStream后就知道,第一次在監聽套接口的時候需要用到IOLoop,然后創建一個IOStream對象,然后以后的IO操作都由IOStream對象完成
所以在上層的HTTP協議處理中,tornado定義了一個HTTPConnection類
這個類主要完成的工作就是完成對下,完成HTTP數據包的傳輸,對上層HTTPserver提供解析后的request對象
那么他們之間的工作模式是怎樣的呢
看看Demo
import httpserver import ioloop def handle_request(request): message = "You requested %s\n" % request.uri request.write("HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s" % ( len(message), message)) request.finish() http_server = httpserver.HTTPServer(handle_request) http_server.listen(8888) ioloop.IOLoop.instance().start()
這次我沒有在Demo里面加注釋,因為我覺得這樣更清晰
上面的代碼是現在HTTP框架很傳統的方式
定義一個處理request 請求的回調函數,並完成自己HTTP數據包的構造,並發送出去
過程很簡單,首先是創建一個HTTPServer,然后加入自己的回調函數,當然這個回調函數可以不這么簡單
這里只是一個Demo,你甚至可以在 request對象中提取表單數據等
啟動監聽端口8888並啟動IOLoop
然后在取得了一個HTTP請求之后,就會回調handle_request,其中在回調函數中的 request 就是由 HTTPConnection處理后的完整的
HTTP層需要的數據,包括一些表單數據等
好了,現在很清晰的知道了HTTP層總共有幾個主要的類
1.HTTPServer
2.HTTPConnection
3.HTTPRequest
這三個類的功能總體上是這樣
總結:這個是很傳統的處理方式,但是其中涉及的細節很多,怎樣放置回調函數等
在此HTTPServer之上,可以通過解析Request並加上一些其他更好的功能,組成一個真正的web框架
此章只是在原理上對HTTPServer做一個分析,下一章將從源代碼方面看整個設計過程