Transports
Transport
代表著兩個通過網(wǎng)絡(luò)通信的端對端的連接陈惰,Transports
負責(zé)描述連接的細節(jié)部分,如流或者數(shù)據(jù)包導(dǎo)向,流量控制和可靠性雏赦,TCP,UDP和Unix的套接字是Transpos
的例子芙扎。他們被設(shè)計為'最大可重用的最小功能單元'并且其余協(xié)議實現(xiàn)分離星岗,允許許多協(xié)議使用相同類型的傳輸。
Transports
實現(xiàn)了ITransport
接口纵顾。具有以下幾種方法:
write
--- 按照非阻塞的方式按順序?qū)⒁恍?shù)據(jù)寫入物理連接
writeSequence
---將一個字符串列表寫入物理連接
loseConnection
---寫入所有掛起的數(shù)據(jù)伍茄,然后關(guān)閉連接
getPeer
---得到此連接的遠程地址
getHost
---得到連接這一端的地址
Transports從protocols中解耦也使得測試這兩層更加容易
Protocols
Protocols
描述了如何異步處理網(wǎng)絡(luò)事件。其中HTTP施逾,DNS和IMAP是應(yīng)用協(xié)議的示例敷矫。
Protocols
實現(xiàn)了IProtocol
接口,具體包括以下方法:
makeConnection
---創(chuàng)建一個連接綁定一個transport和一個server
connectionMade
---在連接創(chuàng)建時被調(diào)用
dataReceived
---在接收到數(shù)據(jù)是被調(diào)用
connectionLost
---在斷開連接時被調(diào)用
對于reactor汉额、transport和protocols之間的關(guān)系曹仗,最好的方法就是用一個例子來描繪,下面給出一個示例(Server+client)
首先是一個Server實現(xiàn):
from twisted.internet import protocol, reactor
class Echo(protocol.Protocol):
def dataReceived(self, data):
# 一旦有數(shù)據(jù)到來就返回一個回應(yīng)
self.transport.write(data)
class EchoFactory(protocol.Factory):
def buildProtocol(self, addr):
return Echo()
reactor.listenTCP(8000, EchoFactory())
reactor.run()
然后是一個客戶端
from twisted.internet import reactor, protocol
class EchoClient(protocol.Protocol):
def connectionMade(self):
self.transport.write("hello, world!")
def dataReceived(self, data):
print "Server said:", data
self.transport.loseConnection()
def connectionLost(self, reason):
print "connection lost"
class EchoFactory(protocol.ClientFactory):
def buildProtocol(self, addr):
return EchoClient()
def clientConnectionFailed(self, connector, reason):
print "Connection failed - goodbye!"
reactor.stop()
def clientConnectionLost(self, connector, reason):
print "Connection lost - goodbye!"
reactor.stop()
reactor.connectTCP("localhost", 8000, EchoFactory())
reactor.run()
上述代碼的描述:
運行服務(wù)器腳本啟動偵聽端口8000上的連接的TCP服務(wù)器蠕搜。服務(wù)器使用Echo
協(xié)議(自定義)怎茫,并通過TCP傳輸寫出數(shù)據(jù)。
運行客戶端與服務(wù)端建立TCP連接,回應(yīng)服務(wù)器響應(yīng)轨蛤,然后終止連接并停止reactor
蜜宪。
Factory
主要用于生產(chǎn)連接兩端的協(xié)議實例
Transports
是異步雙向的
connectTCP
負責(zé)與reactor
注冊回調(diào),以便在數(shù)據(jù)可以從socket
上讀取時得到通知祥山。
by---http://www.aosabook.org/en/twisted.html
將Twisted的知識再系統(tǒng)深入學(xué)習(xí)一遍圃验。。缝呕。澳窑。