這是一個更大的程序的一部分;我只會解釋相關部分。基本上,我的代碼想創建一個到遠程主機的新連接。這應該返回一個Deferred,一旦連接建立就會觸發,所以我可以發送一些信息。Twisted,'connectionMade'如何觸發特定的延遲?
我正在創建與twisted.internet.interfaces.IReactorSSL.connectSSL
的連接。在我的ClientFactory
實例上調用buildProtocol
以獲取新連接(twisted.internet.protocol.Protocol
)對象,並返回twisted.internet.interfaces.IConnector
。當連接開始時,Twisted在工廠呼叫startedConnecting
,給它IConnector
。當實際建立連接時,將調用協議的connectionMade
回調,不帶任何參數。
現在,如果我只需要每個主機/端口一個連接,其餘的將很容易。在調用connectSSL
之前,我會創建一個Deferred,並將其放在鍵入(主機,端口)的字典中。然後,在協議的connectionMade中,我可以使用self.transport.getPeer()
來檢索主機/端口,使用它來查找Deferred併發出它的回調。但是如果我想創建多個連接,這顯然會失效。
問題是,我看不到任何其他方式將調用connectSSL
之前創建的延遲I創建與稍後的connectionMade
關聯。