1

最初に Twisted を使用したので、Tornado では双方向通信の問題に適切に取り組んでいない可能性があります。

データを受信する Twisted の方法は次のようになります。

class MyProtocol(Protocol):
    def dataReceived(self, data):
        # Figure out if this is a chunk of a previous message
        # or if it's a new message

私はTornadoでこれを行っています.Tornadoは動作しているようですが、多少異なります:

class MyClient(object):
    @coroutine
    def main_loop(self):
        while True:
            message_header = yield Task(self.stream.read_bytes, 8)

            # Read/write from here

ドキュメンテーションは、「よりクリーンな」アプローチ(またはその点でのアプローチ)を示唆していないようですが、これは正しい方法ですか?

4

1 に答える 1

1

Twisted のProtocolin に相当するのは、 のIOStreamようなものstream.read_until_close(callback=self.connectionLost, streaming_callback=self.dataReceived)です。しかし、2 番目の例で行ったことを実行し、他の読み取りメソッド ( 、 など) を使用して、必要なものを個別のチャンクで読み取る方がより慣用的read_bytesですread_untilIOStreamは現在、(クローズ コールバックが別になっているため) あまりコルーチンに適していないことに注意してください。そのためIOStream、明示的なコールバックと直接やり取りするコードを記述するのがおそらく最善です。

于 2013-09-22T23:55:17.480 に答える