Python框架之Tornado(概述)

本系列博文計劃:html

  一、剖析基於Python的Web框架Tornado的源碼,爲什麼要閱讀源碼?python

  Tornado 由前 google 員工開發,代碼很是精練,實現也很輕巧,加上清晰的註釋和豐富的 demo,咱們能夠很容易的閱讀分析 tornado. 經過閱讀 Tornado 的源碼,你將學到:ios

  • 理解 Tornado 的內部實現,使用 tornado 進行 web 開發將更加駕輕就熟。
  • 如何實現一個高性能,非阻塞的 http 服務器。
  • 如何實現一個 web 框架。
  • 各類網絡編程的知識,好比 epoll
  • python 編程的絕佳實踐

在tornado的子目錄中,每一個模塊都應該有一個.py文件,你能夠經過檢查他們來判斷你是否從已經從代碼倉庫中完整的遷出了項目。在每一個源代碼的文件中,你均可以發現至少一個大段落的用來解釋該模塊的doc string,doc string中給出了一到兩個關於如何使用該模塊的例子。web

 

  二、爲Python開發一個完善的MVC框架  編程

  首先將帶着你們一塊兒來剖析基於python編寫的Web框架 tornado ,本着易讀易懂的目標來寫這一系列,寄希讓小白也能zeng明白其中的道理,與其說剖析還不如說是白話,由於本系列都會用通俗的語言去描述Web框架中的各個知識點。瀏覽器

概述

Tornado 是 FriendFeed 使用的可擴展的非阻塞式 web 服務器及其相關工具的開源版本。這個 Web 框架看起來有些像web.py 或者 Google 的 webapp,不過爲了能有效利用非阻塞式服務器環境,這個 Web 框架還包含了一些相關的有用工具 和優化。服務器

Tornado 和如今的主流 Web 服務器框架(包括大多數 Python 的框架)有着明顯的區別:它是非阻塞式服務器,並且速度至關快。得利於其 非阻塞的方式和對 epoll 的運用,Tornado 每秒能夠處理數以千計的鏈接,這意味着對於實時 Web 服務來講,Tornado 是一個理想的 Web 框架。咱們開發這個 Web 服務器的主要目的就是爲了處理 FriendFeed 的實時功能 ——在 FriendFeed 的應用裏每個活動用戶都會保持着一個服務器鏈接。(關於如何擴容 服務器,以處理數以千計的客戶端的鏈接的問題,請參閱 C10K problem。)websocket

下載安裝:網絡

pip3 install tornado
源碼安裝
https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz

Tornado模塊分類

1. Core web frameworkapp

  • tornado.web — 包含web框架的大部分主要功能,包含RequestHandler和Application兩個重要的類
  • tornado.httpserver — 一個無阻塞HTTP服務器的實現
  • tornado.template — 模版系統
  • tornado.escape — HTML,JSON,URLs等的編碼解碼和一些字符串操做
  • tornado.locale — 國際化支持

2. Asynchronous networking 底層模塊

  • tornado.ioloop — 核心的I/O循環
  • tornado.iostream — 對非阻塞式的 socket 的簡單封裝,以方便經常使用讀寫操做
  • tornado.httpclient — 一個無阻塞的HTTP服務器實現
  • tornado.netutil — 一些網絡應用的實現,主要實現TCPServer類

3. Integration with other services

  • tornado.auth — 使用OpenId和OAuth進行第三方登陸
  • tornado.database — 簡單的MySQL服務端封裝
  • tornado.platform.twisted — 在Tornado上運行爲Twisted實現的代碼
  • tornado.websocket — 實現和瀏覽器的雙向通訊
  • tornado.wsgi — 與其餘python網絡框架/服務器的相互操做

4. Utilities

  • tornado.autoreload — 生產環境中自動檢查代碼更新
  • tornado.gen — 一個基於生成器的接口,使用該模塊保證代碼異步運行
  • tornado.httputil — 分析HTTP請求內容
  • tornado.options — 解析終端參數
  • tornado.process — 多進程實現的封裝
  • tornado.stack_context — 用於異步環境中對回調函數的上下文保存、異常處理
  • tornado.testing — 單元測試

框架使用

寫一個hello,world:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
   
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()
View Code
  • 第一步:執行腳本,監聽 8888 端口
  • 第二步:瀏覽器客戶端訪問 /index  -->  http://127.0.0.1:8888/index
  • 第三步:服務器接受請求,並交由對應的類處理該請求
  • 第四步:類接受到請求以後,根據請求方式(post / get / delete ...)的不一樣調用並執行相應的方法
  • 第五步:方法返回值的字符串內容發送瀏覽器

由上述分析,咱們將整個Web框架分爲兩大部分:

  • 待請求階段,即:建立服務端socket並監聽端口
  • 處理請求階段,即:當有客戶端鏈接時,接受請求,並根據請求的不一樣作出相應的相應

那麼在記下來的博文中將按照這兩種分類來進行剖析...

相關文章
相關標籤/搜索