これはより大きなプログラムの一部です。関連する部分だけを説明します。基本的に、私のコードはリモートホストへの新しい接続を作成したいと考えています。これにより、Deferredが返されます。これは、接続が確立されると起動するため、何かを送信できます。
との接続を作成していtwisted.internet.interfaces.IReactorSSL.connectSSL
ます。これはbuildProtocol
、ClientFactory
インスタンスを呼び出して新しい接続(twisted.internet.protocol.Protocol
)オブジェクトを取得し、を返しますtwisted.internet.interfaces.IConnector
。接続が開始されると、Twistedはファクトリを呼び出しstartedConnecting
、ファクトリにを与えますIConnector
。接続が実際に確立されると、プロトコルのconnectionMade
コールバックが引数なしで呼び出されます。
これで、ホスト/ポートごとに1つの接続のみが必要な場合、残りは簡単になります。を呼び出す前connectSSL
に、Deferredを作成し、キーが設定された辞書(host、port)に配置します。次に、プロトコルのconnectionMadeでself.transport.getPeer()
、ホスト/ポートを取得し、それを使用してDeferredを検索し、そのコールバックを起動するために使用できます。しかし、複数の接続を作成したい場合、これは明らかに機能しなくなります。
connectSSL
問題は、connectionMade
後で呼び出す前に作成したDeferredを関連付ける他の方法が見当たらないことです。