我在这里有一个简单的键盘回显程序来测试EventMachine,以及没有EM编写的等效代码。似乎EventMachine只在Windows上触发了receive_line方法,并在Windows上触发了额外的按键操作。这是eventmachine应用程序:
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 unitl另一个按键,但这个功能正如人们所期望的那样,在每次返回按键后回显输入:
while line = STDIN.readline
puts "Typed #{line}"
end
有关为何发生这种情况的任何想法?我希望EventMachine在每次返回按键后立即触发received_line。