ツイストでは、どのように「connectionMade」火の特定は延期することができますか?

StackOverflow https://stackoverflow.com/questions/570397

質問

これは、より大きなプログラムの一部です。私は、関連する部分だけを説明します。基本的に、私のコードは、リモートホストへの新しい接続を作成したいと考えています。これは、接続が確立されるとトリガーする、繰延返す必要がありますので、私はそれで何かを送ることができます。

私はtwisted.internet.interfaces.IReactorSSL.connectSSLとの接続を作成しています。それは、新しい接続(buildProtocol)オブジェクトを取得するために私のClientFactoryインスタンス上twisted.internet.protocol.Protocolを呼び出し、twisted.internet.interfaces.IConnectorを返します。接続が開始されると、ツイストはそれをstartedConnectingを与え、工場にIConnectorを呼び出します。接続が実際に行われた場合、プロトコルのconnectionMadeコールバックは引数なしで呼び出されます。

私は唯一のホスト/ポートごとに1つの接続を必要に応じて

さて、残りは簡単だろう。 connectSSLを呼び出す前に、私は繰延作成しますと(ホスト、ポート)をキーと辞書にそれを置きます。次に、プロトコルのconnectionMadeに、私は、ホスト/ポートを取得するためにself.transport.getPeer()を使用繰延をルックアップするためにそれを使用し、そのコールバックを発射することができます。しかし、これは明らかに、私は複数の接続を作成したい場合にブレークダウンします。

問題は、私は私が後でconnectSSLconnectionMadeを呼び出す前に作成した繰延ます。

を関連付けるため、他の方法を見ることができないということです
役に立ちましたか?

解決

うまくいけば、より良い方法があるが、

いくつかのより多くの本を見て、私は、私は解決策を考え出すたと思います。これは一種の奇妙なようです。

ツイストは、単純な使い捨ての接続を生成するために使用されるクラス、ClientCreatorを有しています。理論的にはそれは私が何をしたいん。接続し、接続が確立される火災Deferredを返します。私は、プロトコルのコンストラクタに引数を渡す機能を失い、そのための接続間で状態を共有する方法がありませんと思いますので、私は、しかし、私はこれを使用することができるとは思わなかった。

しかし、私はちょうどClientFactoryコンストラクタは、プロトコルのコンストラクタに渡す*argsを受け入れないことに気づきました。あるいは、少なくとも、それはそれのように見えます。このため実質的にはドキュメントがあります。その場合、私はそれを私の工場(または任意の他、工場はもはや必要であれば)への参照を与えることができます。そして私は、接続が確立される火災Deferredを取り戻すます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top