「client-to-serverA」連接由與傳輸關聯的協議實例表示。這些都是普通的舊Python對象,所以你可以做一些事情,比如將它們作爲參數傳遞給函數或類初始化器,或者將它們設置爲其他對象的屬性。
舉例來說,如果你有ClientToServerAProtocol
一個fetchServerBData
方法,其響應來自客戶端接收一些字節調用時,你可能會寫這樣的:
class ClientToServerAProtocol(Protocol):
...
def fetchServerBData(self, anArg):
factory = protocol.ClientFactory()
factory.protocol = Authenticate
factory.clientToServerAProtocol = self
reactor.connectSSL("localhost",31337, factory, ssl.ClientContextFactory())
由於ClientFactory
套本身作爲它創建的任何協議上的factory
屬性,將由此產生的Authenticate
實例將能夠說`self.factory.clientToServerAProtocol並獲得對該「client-to-serverA」連接的引用。
這種方法有很多變化。這裏是另外一個使用最近推出的端點API:
from twisted.internet.endpoints import SSL4ClientEndpoint
class ClientToServerAProtocol(Protocol):
...
def fetchServerBData(self, anArg):
e = SSL4ClientEndpoint(reactor, "localhost", 31337, ssl.ClientContextFactory())
factory = protocol.Factory()
factory.protocol = Authenticate
connectDeferred = e.connect(factory)
def connected(authProto):
authProto.doSomethingWith(self)
connectDeferred.addCallback(connected)
基本相同的位置的想法 - 用self
給予了「客戶端到serverA的」連接你感興趣的Authenticate
協議的參考。在這裏,我使用了一個嵌套函數來''關閉''self
。這只是獲得參考到程序正確部分的許多選項中的另一個選項。