2014-10-29 60 views
0

我有一個簡單的龍捲風應用程序,它從telnet客戶端讀取數據。 我正在使用基於TCPServer的處理程序來處理telnet會話(代碼示例簡化)。如何從Tornado的IOStream讀取單個按鍵

class CliServer(TCPServer, LoggerMixin): 
    def __init__(self): 
    super(CliServer, self).__init__() 

    def handle_stream(self, stream, address): 
    #Some irrelevant code 
    self.stream.read_bytes(max_buffsize, callback=self._on_read, streaming_callback=None, partial=True) 

    def _on_read(self, data) 
    #process data 
    pass 

處理程序被註冊在主IOLoop:

my_fd = self.create_socket(self.options.port, self.options.host) 
server = CliServer(self.options.current_scope) 
server.add_socket(socket.fromfd(my_fd, 
           socket.AF_INET, 
           socket.SOCK_STREAM)) 

我想盡快,因爲它已經從套接字讀取接收數據的任何塊。這部分數據將由「CliServer._on_read回調」進行處理。

我目前的實現中存在的問題是,BaseIOStream.read_bytes方法一旦以「\ r \ n」終止,我就會提供數據,這對我來說已經太遲了。 例如,當telnet用戶鍵入「ab \ tc \ n」時,_on_read回調將被調用一次,而不是每個字符被調用4次('a','b','\ t','c')。

我在做什麼錯?

回答