これはより大きなプログラムの一部です。関連する部分だけを説明します。基本的に、私のコードはリモートホストへの新しい接続を作成したいと考えています。これにより、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を関連付ける他の方法が見当たらないことです。