【问题标题】:Tornado equivalent to Twisted's dataReceived?Tornado 相当于 Twisted 的 dataReceived?
【发布时间】:2013-09-07 03:02:01
【问题描述】:

首先使用 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

文档似乎没有建议任何“更清洁”的方法(或任何方法,就此而言),所以我是否以正确的方式进行?

【问题讨论】:

    标签: python sockets twisted tornado


    【解决方案1】:

    Twisted 在IOStream 中的Protocol 相当于stream.read_until_close(callback=self.connectionLost, streaming_callback=self.dataReceived)。但是,按照您在第二个示例中所做的操作,并使用其他读取方法(read_bytesread_until 等)以单独的块读取您需要的内容,这种做法更为惯用。请注意,IOStream 目前对协程不太友好(由于单独的关闭回调),因此最好编写直接与 IOStream 接口并带有显式回调的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      相关资源
      最近更新 更多