Twisted框架

Twisted是一個事件驅動型的網絡模型。時間驅動模型編程是一種範式,這裏程序的執行流由外部決定。特色是:包含一個事件循環,當外部事件發生時,使用回調機制來觸發相應的處理。react

線程模式:程序員

1.單線程同步模型,任務按照順序執行。若是某個任務由於IO阻塞,其餘全部的任務都必須等待,直到完成才能執行,但若是任務之間沒有相互等待的話,就使得程序沒必要要的下降了運行速度。數據庫

2.多線程,線程是由操做系統來管理的,在多處理器系統上交錯執行。這使得單個線程阻塞在某個資源的同時其餘線程能夠繼續執行,與完成相似功能的同步程序比,這種方式更有效,但程序猿必須本身寫代碼保護共享資源,防止其被多個線程同時訪問。多線程程序更加難以推斷,由於這類程序不得不經過線程的同步機制如鎖、可重入函數、線程局部存儲或者其餘機制來處理線程安全問題,若是實現不當就會出現bug編程

3.事件驅動模型中,若是有三個任務交錯執行,可是仍然在一個單獨的線程控制中,當處理IO或者其餘昂貴的操做時,註冊一個回調到事件循環中,而後當IO操做完成以後繼續執行,回調描述來該如何處理某個事件,這可使得程序儘量的得以執行而不須要用到額外的線程,而且程序員也不須要專心線程安全問題。安全

Reactor模塊服務器

反應堆,Twisted的核心就是reactor的事件循環,Reactor能夠感知網絡、文件系統以及定時器事件。他等待而後處理這些事件,從特定的平臺的行爲中抽象出來,並提供統一的接口,使得在網絡協議棧的任何位置對事件作出相應都變得簡單。網絡

目前的在全部平臺的默認Reactor都是基於poll API的。多線程

 阻塞調用是指調用結果返回以前,當前線程會被颳起,函數只有在獲得結果以後纔會返回。異步

非阻塞調用,好比read信息,若是緩衝區沒有數據,則馬上返回,不會等待數據到來。函數

Deferreds

Deferreds對象包含一堆回調鏈,一個是針對操做成功的回調,一個是針對操做失敗的回調。初始常態下Deferred的兩條鏈都是空的,在事件處理的過程當中,每一個階段都爲其添加處理成功和處理失敗的回調。當一個異步結果到來時,Deferred對象就像是被激活,那麼處理成功的回調和處理失敗的回調就能夠以合適的方式按照她們添加進來的順序依次調用。

from twisted.internet import reactor
import getPage

def processPage(page):
    print page

def logError(error):
    print error

def finishProcessing(value):
    print "Shutting down..."
    reactor.stop()

url = "http://google.com"
deferred = getPage(url) # getPage returns a Deferred
deferred.addCallbacks(success, failure)
deferred.addBoth(stop)

reactor.run()

Deferred對象建立時包含兩個添加回調的階段,第一階段,addcallback將processpage和logerror添加到他們各自歸屬的回調鏈中,而後addboth再將finishprocessing同時添加到這兩個回調鏈中。

Transports

Transports表明網絡中兩個通訊結點之間的鏈接。Transports負責描述鏈接的細節,好比鏈接是面向流式的仍是面向數據報的,流控以及可靠性。TCP、UDP和Unix套接字可做爲transports的例子。它們被設計爲「知足最小功能單元,同時具備最大程度的可複用性」,並且從協議實現中分離出來,這讓許多協議能夠採用相同類型的傳輸。Transports實現了ITransports接口,它包含以下的方法:

write                   以非阻塞的方式按順序依次將數據寫到物理鏈接上
writeSequence           將一個字符串列表寫到物理鏈接上
loseConnection          將全部掛起的數據寫入,而後關閉鏈接
getPeer                 取得鏈接中對端的地址信息
getHost                 取得鏈接中本端的地址信息

Protocols

Protocols描述瞭如何以異步的方式處理網絡中的事件。

makeConnection               在transport對象和服務器之間創建一條鏈接
connectionMade               鏈接創建起來後調用
dataReceived                 接收數據時調用
connectionLost               關閉鏈接時調用

Service

Service就是IService接口下實現的能夠啓動和中止的組件。Twisted自帶有TCP、FTP、HTTP、SSH、DNS等服務以及其餘協議的實現。其中許多Service均可以註冊到單獨的應用中。IService接口的核心是:

startService    啓動服務。可能包含加載配置數據,設定數據庫鏈接或者監聽某個端口
stopService     關閉服務。可能包含將狀態保存到磁盤,關閉數據庫鏈接或者中止監聽端口

咱們的Echo服務使用TCP協議,所以咱們可使用Twisted中IService接口下默認的TCPServer實現。

Application

Application是處於最頂層的Service,表明了整個Twisted應用程序。Service須要將其自身同Application註冊,而後就能夠用下面咱們將介紹的部署工具twistd搜索並運行應用程序。咱們將建立一個能夠同Echo Service註冊的Echo應用。

相關文章
相關標籤/搜索