4

ここには、EventMachineをテストするための簡単なキーボードエコープログラムと、EMなしで記述された同等のコードがあります。EventMachineは、Windowsで追加のキーを押した後にreceive_lineメソッドをトリガーするだけのようです。これが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キーを押すと改行が作成されますが、入力した行は、別のキーが押されるまでコンソールにエコーバックされません。
別のキーを押すたびにSTDINをフラッシュしないだけで、Windowsコンソールに問題があるかどうかをテストするために、別のスニペットを作成しましたが、これは期待どおりに機能し、キーを押すたびに入力をエコーバックします。

while line = STDIN.readline
  puts "Typed #{line}"
end

なぜこれが起こっているのかについてのアイデアはありますか?EventMachineで、リターンキーを押すたびにすぐにreceived_lineをトリガーしたいと思います。

4

0 に答える 0