ツイストPythonファクトリメソッドがreactorラッパーを使用しているときに呼び出されない

ノバーク

簡単なクライアント/サーバーのセットアップがあります。クライアントコードは次のとおりです。

from twisted.internet import reactor
from twisted.internet import protocol
from twisted.internet.endpoints import TCP4ClientEndpoint

class MyProtocol(protocol.Protocol):

    def connectionMade(self):
        print "Hello!"

    def dataReceived(self, data):
        print data

class MyProtocolFactory(protocol.ClientFactory):

    def startedConnecting(self, connector):
        print "Starting to connect!"

    def buildProtocol(self, addr):
        return MyProtocol()

    def clientConnectionLost(self, connector, reason):
        print "Lost connection, reason = %s" % reason

    def clientConnectionFailed(self, connector, reason):
        print "Connection failed, reason = %s" % reason
        reactor.stop()

endpoint = TCP4ClientEndpoint(reactor, "127.0.0.1", 54321, timeout=5)
endpoint.connect(MyProtocolFactory())
reactor.run()

何らかの理由で、このクライアントはサーバーに接続し、プロトコルは正しく機能します(接続が成功すると、サーバーから送信されたデータとともに「Hello!」が出力されます)が、プロトコルファクトリは呼び出されません。メソッド。StartedConnectingが呼び出されず、サーバーを停止してもclientConnectionLostが呼び出されません。サーバーが起動する前にクライアントを実行しようとすると、clientConnectionFailedが呼び出されることも期待できます。

これが奇妙な部分です...上記のコードの最後の3行を次のように変更した場合:

reactor.connectTCP("127.0.0.1", 54321, MyProtocolFactory())
reactor.run()

その後、すべてが期待どおりに機能し、上記のすべてのケースですべてのメソッドが呼び出されます。

エンドポイントについての私の理解は、それらが(とりわけ)「connectTCP」を追加の動作でラップすることですが、それが2番目のコードスニペットで機能する理由を理解できませんが、最初のコードスニペットでは機能しません。

何か案は?

ジャンポールカルデローネ

クライアントエンドポイントインターフェイスは、の追加の接続状態通知メソッドを呼び出しませんClientFactory

したがって、エンドポイントはある意味で「ラップ」などを行いますが、connectTCPそれらがこれらの低レベルのメソッドを使用するのとまったく同じ動作をするというのは真実ではありません。

エンドポイントの場合、ファクトリの仕事はプロトコルインスタンスを提供することです。工場は、接続管理の他の側面についてはもはや責任を負いません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ドットソース呼び出しでネストされているときにクラスが呼び出されるスクリプトファイルの名前を取得するにはどうすればよいですか?

分類Dev

mockitoを使用して配列要素をスパイすると、メソッドが呼び出されたときに必要なのに呼び出されない

分類Dev

リンクリストクラスが別のクラスメソッドから呼び出されたときにノードを挿入しない

分類Dev

呼び出し側に影響を与えないメソッドにパラメーターとして渡されるプリミティブ ラッパー クラスのインクリメント

分類Dev

メソッドが呼び出されていないのにヘルパーファイルにメソッドを追加すると、Railsアプリがクラッシュする

分類Dev

ソフトウェア全体で適切なパラメータを使用してメソッドが呼び出されることをテストします

分類Dev

リストビューアイテムがフォーカスされているときにメソッドを呼び出すC#

分類Dev

initComponent内で宣言されたときに、イベントリスナーがコントローラーメソッドを呼び出さない

分類Dev

子クラスのデリゲートメソッドがSwift 5コンパイラーで呼び出されないことがある

分類Dev

Nettyサーバーに対してリクエストが行われたときにChannelReadメソッドが呼び出されない

分類Dev

メソッドのパラメーターとしてセレクターを呼び出そうとしているときに、認識されないセレクターがクラスに送信される

分類Dev

リストビューでリストアイテムを選択するときにOnItemSelectedメソッドが呼び出されない

分類Dev

iOS 13.1 UITextViewデリゲートメソッドshouldInteractが添付ファイルをスクロールするときに呼び出される

分類Dev

Angular2タイプスクリプトが機能しないイベントによって呼び出されたメソッドを介してクラス変数値またはクラスプロパティ値を変更する

分類Dev

クラスの__new__メソッドをファクトリとして使用:__init__が2回呼び出される

分類Dev

派生したイミディエートオブジェクトからオーバーライドされていないベースメソッドの仮想メソッドを間接的に呼び出すときに、vtableルックアップが実行されますか?

分類Dev

派生クラスのリストを受け取るメソッドの呼び出しがC ++でコンパイルされない

分類Dev

リスナーでConsumerRecord <>を使用すると、値が呼び出しメソッドに返されない

分類Dev

スーパークラスメソッドが呼び出されたときにテストする方法

分類Dev

デリゲートメソッドが呼び出されていないか、呼び出されたときに起動されない

分類Dev

オブジェクトをパラメーターとして渡すときに、デストラクタが呼び出されているのにコンストラクションが呼び出されていないのはなぜですか?

分類Dev

Mockitoスパイ-内部クラスメソッドを呼び出すとき、スパイオブジェクトのメソッドをスパイしない

分類Dev

リフレクションを使用してメソッドを呼び出すと、「オブジェクトは宣言クラスのインスタンスではない」と表示されるのはなぜですか?

分類Dev

Typescriptで、イベントハンドラーとして呼び出される同じクラスの別のメソッドからクラスメソッドを呼び出すにはどうすればよいですか?

分類Dev

Pythonパッチ:クラスでネストされたメソッドを呼び出すことが機能しない

分類Dev

ジェネリッククラスでジェネリックリターンを使用してメソッドを呼び出すことが、javacによって安全でないと見なされるのはなぜですか?

分類Dev

ビューコントローラー以外にデリゲートを割り当てるときに呼び出されないSFSafariViewControllerDelegateメソッド

分類Dev

リストに追加するときにSetattrメソッドが呼び出されない

分類Dev

スーパークラスメソッドがオーバーライドされているのに、そのメソッドが呼び出されるのはなぜですか?(OCA模擬テストから)

Related 関連記事

  1. 1

    ドットソース呼び出しでネストされているときにクラスが呼び出されるスクリプトファイルの名前を取得するにはどうすればよいですか?

  2. 2

    mockitoを使用して配列要素をスパイすると、メソッドが呼び出されたときに必要なのに呼び出されない

  3. 3

    リンクリストクラスが別のクラスメソッドから呼び出されたときにノードを挿入しない

  4. 4

    呼び出し側に影響を与えないメソッドにパラメーターとして渡されるプリミティブ ラッパー クラスのインクリメント

  5. 5

    メソッドが呼び出されていないのにヘルパーファイルにメソッドを追加すると、Railsアプリがクラッシュする

  6. 6

    ソフトウェア全体で適切なパラメータを使用してメソッドが呼び出されることをテストします

  7. 7

    リストビューアイテムがフォーカスされているときにメソッドを呼び出すC#

  8. 8

    initComponent内で宣言されたときに、イベントリスナーがコントローラーメソッドを呼び出さない

  9. 9

    子クラスのデリゲートメソッドがSwift 5コンパイラーで呼び出されないことがある

  10. 10

    Nettyサーバーに対してリクエストが行われたときにChannelReadメソッドが呼び出されない

  11. 11

    メソッドのパラメーターとしてセレクターを呼び出そうとしているときに、認識されないセレクターがクラスに送信される

  12. 12

    リストビューでリストアイテムを選択するときにOnItemSelectedメソッドが呼び出されない

  13. 13

    iOS 13.1 UITextViewデリゲートメソッドshouldInteractが添付ファイルをスクロールするときに呼び出される

  14. 14

    Angular2タイプスクリプトが機能しないイベントによって呼び出されたメソッドを介してクラス変数値またはクラスプロパティ値を変更する

  15. 15

    クラスの__new__メソッドをファクトリとして使用:__init__が2回呼び出される

  16. 16

    派生したイミディエートオブジェクトからオーバーライドされていないベースメソッドの仮想メソッドを間接的に呼び出すときに、vtableルックアップが実行されますか?

  17. 17

    派生クラスのリストを受け取るメソッドの呼び出しがC ++でコンパイルされない

  18. 18

    リスナーでConsumerRecord <>を使用すると、値が呼び出しメソッドに返されない

  19. 19

    スーパークラスメソッドが呼び出されたときにテストする方法

  20. 20

    デリゲートメソッドが呼び出されていないか、呼び出されたときに起動されない

  21. 21

    オブジェクトをパラメーターとして渡すときに、デストラクタが呼び出されているのにコンストラクションが呼び出されていないのはなぜですか?

  22. 22

    Mockitoスパイ-内部クラスメソッドを呼び出すとき、スパイオブジェクトのメソッドをスパイしない

  23. 23

    リフレクションを使用してメソッドを呼び出すと、「オブジェクトは宣言クラスのインスタンスではない」と表示されるのはなぜですか?

  24. 24

    Typescriptで、イベントハンドラーとして呼び出される同じクラスの別のメソッドからクラスメソッドを呼び出すにはどうすればよいですか?

  25. 25

    Pythonパッチ:クラスでネストされたメソッドを呼び出すことが機能しない

  26. 26

    ジェネリッククラスでジェネリックリターンを使用してメソッドを呼び出すことが、javacによって安全でないと見なされるのはなぜですか?

  27. 27

    ビューコントローラー以外にデリゲートを割り当てるときに呼び出されないSFSafariViewControllerDelegateメソッド

  28. 28

    リストに追加するときにSetattrメソッドが呼び出されない

  29. 29

    スーパークラスメソッドがオーバーライドされているのに、そのメソッドが呼び出されるのはなぜですか?(OCA模擬テストから)

ホットタグ

アーカイブ