日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tornado介绍

發(fā)布時間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tornado介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 特點
    • 結構
    • Tornado實現(xiàn)異步原理
    • 模塊
    • Tornado服務器的三個底層核心模塊
    • 設計模型


Tornado龍卷風是一個開源的網(wǎng)絡服務器框架,它是基于社交聚合網(wǎng)站FriendFeed的實時信息服務開發(fā)而來的

  • Tornado是使用Python編寫的Web服務器兼Web應用框架
  • 與主流Web服務器框架不同的是,Tornado是異步非阻塞式服務器,得益于非阻塞式和對epoll模型的運用
  • Tornado是實時Web服務的一個理想框架,它非常適合開發(fā)長輪詢、WebSocket和需要與每個用戶建立持久連接的應用

特點

  • 輕量級Web框架

  • 異步非阻塞IO處理方式

  • Tornado采用的單進程單線程異步IO的網(wǎng)絡模式,其高性能源于Tornado基于Linux的Epoll(UNIX為kqueue)的異步網(wǎng)絡IO

  • 出色的抗負載能力

  • 不依賴多進程或多線程

  • WSGI全棧替代產品
    WSGI把應用(Application)和服務器(Server)結合起來,Tornado既可以是WSGI應用也可以是WSGI服務

  • 既是WebServer也是WebFramework

Tornado是基于Bret Taylor和其他人員為FrientFeed所開發(fā)的網(wǎng)絡服務框架,當FriendFeed被Facebook收購后得以開源。不同于那些最多只能達到1w并發(fā)連接的傳統(tǒng)網(wǎng)絡服務器。Tornado在設計之初就考慮到了性能因素,旨在解決C10K問題,這樣的設計使其成為一個擁有高性能的框架

結構

  • Web框架
    主要包括RequestHandler用于創(chuàng)建Web應用程序和各種支持類的子類
  • HTTP服務器與客戶端
    主要包括HTTPServer和AsyncHTTPClient
  • 異步網(wǎng)絡庫
    主要包括IOLoop和IOStream作為HTTP組件的構建塊
  • 協(xié)程庫
    Tornado的Web框架和HTTP服務器一起提供了完整的堆棧替代方案WSGI

Tornado實現(xiàn)異步原理

  • 每個請求過來就會創(chuàng)建一個socket對象,并yield一個future對象,然后tornado就處理下一個連接了
  • tornado內部會以socket對象為key,future對象為value加入字典
  • tornado內部調用epoll方法監(jiān)聽這個全局字典,有socket對象變化就會執(zhí)行future.set_result(’…’)
  • 執(zhí)行future.set_result(’…’)后就會將future.ready標志位變成True,然后就會調用callback方法返回內容
  • 注1:yield 一個 Future對象,那么Tornado會等待,直到執(zhí)行future.set_result(’…’)才會釋放
     
    注2:epoll實質是不斷的輪詢所負責的所有socket,當某個socket有數(shù)據(jù)到達了,就通知用戶進程

     
         
    Tornado實現(xiàn)異步非阻塞舉例

    import tornado.ioloop import tornado.web from tornado import genclass IndexHandler(tornado.web.RequestHandler):@gen.coroutinedef get(self):self.write('I am index!!')application = tornado.web.Application([(r"/index/", IndexHandler), ])if __name__ == "__main__":print('http://127.0.0.1:8888/index/')application.listen(8888)tornado.ioloop.IOLoop.instance().start()

    模塊

    Tornado是一個輕量級框架,它的模塊不多最重要的模塊是web,web模塊包含了Tornado大部分主要功能的Web框架,其他模塊都是工具性質的,以便讓Web模塊更加有用。

    Core Web Framework 核心Web框架

    • tornado.web 包括Web框架大部分主要功能,包括RequestHandler和Application類
    • tornado.httpserver一個無阻塞HTTP服務器的實現(xiàn)
    • tornado.template模板系統(tǒng)
    • tornado.escape HTML、JSON、URLs等編碼解碼和字符串操作
    • tornado.locale國際化支持

    Asynchronous Networking 異步網(wǎng)絡底層模塊

    • tornado.ioloop 核心IO循環(huán)
    • tornado.iostream對非阻塞的Socket的簡單封裝以方便常用讀寫操作
    • tornado.httpclient無阻塞的HTTP服務器實現(xiàn)
    • tornado.netutil網(wǎng)絡應用的實現(xiàn)主要是TCPServer類

    Integration With Other Services 系統(tǒng)集成服務

    • tornado.auth 使用OpenId和OAuth進行第三方登錄
    • tornado.databaseMySQL服務端封裝
    • tornado.platform.twisted在Tornado上運行Twisted實現(xiàn)的代碼
    • tornado.websocket實現(xiàn)和瀏覽器的雙向通信
    • tornado.wsgi其他Python網(wǎng)絡框架或服務器的相互操作

    Utilities 應用模塊

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

    Tornado服務器的三個底層核心模塊

    • httpserver 服務于web模塊的一個簡單的HTTP服務器的實現(xiàn)

    Tornado的HTTPConnection類用來處理HTTP請求,包括讀取HTTP請求頭、讀取POST傳遞的數(shù)據(jù),調用用戶自定義的處理方法,以及把響應數(shù)據(jù)寫給客戶端的socket

    • iostream 對非阻塞式的socket的封裝以便于常見讀寫操作

    為了在處理請求時實現(xiàn)對socket的異步讀寫,Tornado實現(xiàn)了IOStream類用來處理socket的異步讀寫

    • ioloop 核心的I/O循環(huán)

    Tornado為了實現(xiàn)高并發(fā)和高性能,使用了一個IOLoop事件循環(huán)來處理socket的讀寫事件,IOLoop事件循環(huán)是基于Linux的epoll模型,可以高效地響應網(wǎng)絡事件,這是Tornado高效的基礎保證

    設計模型

    Tornado不僅僅是一個Web框架,它完整地實現(xiàn)了HTTP服務器和客戶端,再此基礎上提供了Web服務,它可分為四層:

    • Web框架:最上層,包括處理器、模板、數(shù)據(jù)庫連接、認證、本地化等Web框架所需功能

    • HTTP/HTTPS層:基于HTTP協(xié)議實現(xiàn)了HTTP服務器和客戶端

    • TCP層:實現(xiàn)TCP服務器負責數(shù)據(jù)傳輸

    • Event層:最底層、處理IO事件

      使用Tornado可以方便地架構出各種類型的web服務器,以HTTP服務器為例來分析下web服務器的工作方式

      一個請求處理的處理過程

    • 服務器綁定bind到特定端口port,然后開始監(jiān)聽listen客戶端的請求

    • 當客戶端連接connect到來時,會將請求發(fā)送給服務器

    • 服務器處理請求完畢后返回響應結果給客戶端

    當需要處理成千上萬的連接的時候,就會遇到典型的The C10K Program問題,常見的解決方案有

    • 一個線程服務多個客戶端,使用非阻塞I/O和水平觸發(fā)的就緒通知
    • 一個線程服務多個客戶端,使用非阻塞I/O和就緒改變時通知
    • 一個服務線程服務于多個客戶端,使用異步I/O
    • 一個服務線程服務于一個客戶端,使用阻塞I/O
    • 將服務代碼編譯進內核

    Tornado采用的方式是“多進程 + 非阻塞 + epoll模式”

    總結

    以上是生活随笔為你收集整理的Tornado介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。