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')。
我在做什麼錯?