ここには、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をトリガーしたいと思います。