4

我这里有一个简单的键盘回显程序来测试 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。

4

0 回答 0