[原]tornado源碼分析系列(五)[HTTPServer 層]


引言:第四章講解的有些亂,主要是代碼太長了,而且還是在一章就講完了,所以我決定將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做一個分析,下一章將從源代碼方面看整個設計過程

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM