2

サーバーからデータを受信するために protocol.Protocol を使用しています。次のように

from twisted.internet.protocol import Protocol, Factory

class MyProtocol(Protocol):
    def dataReceived(self, data):
        print data

class MyFactory(Factory):
    def startedConnecting(self, connector):
        print 'Started to connect.'

    def buildProtocol(self, addr):
        print 'Connected.'
        return MyProtocol()

大きなデータを受信すると、TCP ストリームの断片化が原因で、着信メッセージの一部しか受信しません。受信したデータをバッファリングしようとしています。しかし、残りのデータを受信できません。断片化後にすべてのデータを受信するための良い方法は何ですか?

4

2 に答える 2

2

これは Twisted に関するよくある質問です。 答えは Twisted FAQ にあります。Int16StringReceiverやなど、推奨されるクラスを確認してくださいNetstringReceiver。または、完全な機能を備えたプロセス間メッセージング システムについては、AMP (非同期メッセージング プロトコル)を調べてください。これには、他の言語での実装もあります。

于 2012-08-07T03:26:44.127 に答える
1

オーバーライドしたい関数はstringReceived.

を使用する場合Int16StringReceiverstringReceivedプレフィックス付きの文字列全体が受信された後に入力されますがdataReceived、各文字列の受信中に 0 回以上入力される場合があります。

dataReceivedは、 が を呼び出すInt16StringReceiver前に完全なパケットを構築するために使用する呼び出しstringReceivedです。同時に受信した複数の文字列を解析するか、完全な文字列が受信されるまで待機する必要がある場合があります。

于 2012-12-26T18:31:13.853 に答える