Tornado 安裝與了解


Tornado解析

  Tornado是使用Python編寫的一個強大的、可擴展的Web服務器。它在處理嚴峻的網絡流量時表現得足夠強健,但卻在創建和編寫時有着足夠的輕量級,並能夠被用在大量的應用和工具中。

  我們現在所知道的Tornado是基於Bret Taylor和其他人員為FriendFeed所開發的網絡服務框架,當FriendFeed被Facebook收購后得以開源。不同於那些最多只能達到10,000個並發連接的傳統網絡服務器,Tornado在設計之初就考慮到了性能因素,旨在解決C10K問題,這樣的設計使得其成為一個擁有非常高性能的框架。此外,它還擁有處理安全性、用戶驗證、社交網絡以及與外部服務(如數據庫和網站API)進行異步交互的工具。

1.安裝

1)pip3 install tornado
 
2)源碼安裝:https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz
詳見官網

 

2.socket分析

import socket
def handle_request(client):
    buf = client.recv(1024)
    client.send("HTTP/1.1 200 OK\r\n\r\n".encode('utf-8'))
    client.send("hello...".encode('utf-8'))

def main():
    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sock.bind(('localhost',8000))
    sock.listen(5)
    while True:
        conn,addr=sock.accept()
        handle_request(conn)
        conn.close()

if __name__ == '__main__':
    main()

 

上述分析:

  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 框架

3、tornado 初識

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並監聽端口
  • 處理請求階段,即:當有客戶端連接時,接受請求,並根據請求的不同做出相應的相應

 

返回目錄

 


免責聲明!

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



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