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 执行此操作,这似乎有效,但有些不同:

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 的ProtocolinIOStream将类似于stream.read_until_close(callback=self.connectionLost, streaming_callback=self.dataReceived). 但是,按照您在第二个示例中所做的操作,并使用其他读取方法( 、 等)在单独的块中读取您需要的内容,这会更read_bytes惯用read_until。请注意,这IOStream目前对协程不太友好(由于单独的关闭回调),因此最好编写直接IOStream与显式回调接口的代码。

于 2013-09-22T23:55:17.480 回答