模式在扭曲的Python

模式在扭曲的Python

问题描述:

在扭曲Python从传输读取,数据被写入到一个协议的传输,但通过覆盖dataReceived方法接收。是否有从交通工具读书的模式?使用inlineCallbacks模式在扭曲的Python

例如执行状态时,这将是有益的:

class SomeProtocol(Protocol): 
    @defer.inlineCallbacks 
    def login(self): 
     self.transport.write('login') 
     resp = yield self.transport.read(5, timeout=1) # this doesn't exist 
     if resp != 'user:': 
      raise SomeException() 
     self.transport.write('admin') 
     resp = transport.read(9, timeout=1) 
     if resp != 'password:': 
      raise SomeException() 
     self.transport.write('hunter2') 
     # ... etc 

已经有在实施的API这样一个多年来几次尝试。没有任何牵引。我认为他们现在都被抛弃了。

原则,这并不难实现。您只需将dataReceived回调(推式API)转换为拉式API即可。

在实践中,所产生的代码是脆弱的,而且往往包含更多的bug。

我想你想解决的问题是,dataReceived是一个非常低级的原始解析的字节流。

有许多的这种可能的解决方案。你可以尝试构建一个更高层的基于协议的工具,它知道你的协议的各个方面(这基本上是Twisted中的所有协议实现的原理)。你也可以看看这样的第三方库,如tubes(它提供了一个不同的抽象来处理字节流)。

我结束了维持deferreds列表回调的数据到达,并缓冲输入数据,直到它满足第一个列表中的递延所需数据的长度。

​​

它目前需要计数为非零。将它扩展为支持返回当前在读取缓冲区中的任何内容,以及使用超时但不计数的方式读取,以便返回超时后缓冲区中的内容。