我这里有一个简单的键盘回显程序来测试 EventMachine,以及不使用 EM 编写的等效代码。似乎 EventMachine 仅在 Windows 上的附加按键之后触发 receive_line 方法。这是事件机器应用程序:
class KeyboardHandler < EM::Connection
include EM::Protocols::LineText2
def post_init
prompt
end
def prompt
print "> "
end
def receive_line line
line.chomp!
case(line)
when /^exit$/ then
EM.stop
else
puts line
prompt
end
end
end
EventMachine.run {
EventMachine.open_keyboard KeyboardHandler
}
键入输入然后按 enter 将创建一个换行符,但键入的行不会回显到控制台,直到再次按下按键。
我创建了另一个片段来测试 Windows 控制台是否存在问题,只是没有刷新 STDIN 单元,另一个按键,但这正如人们所期望的那样,在每次返回按键后回显输入:
while line = STDIN.readline
puts "Typed #{line}"
end
关于为什么会发生这种情况的任何想法?我希望 EventMachine 在每次返回按键后立即触发 received_line。