私はJSON-APIを10秒ごとに繰り返し、JSONデータに特定のキーが見つかった場合は同じ接続(キープアライブ)を使用して2回目のHTTPリクエストを行います。私のコードにEM.stop
を置かないと、プログラムはreq1.callbackでの処理が終了した後で待機するようになります。em-http-request - EventMachine.stopはどこに置くのですか?
req2.callback
の中にEM.stop
を入れて、期待どおりに反復しています。
しかし、JSON文書にキーfoobar
が含まれていない場合、req1.callbackでの処理が完了した後でプログラムの待機が停止します。
req1.callbackの最後の行にEM.stop
を追加すると、JSONドキュメントのキーがfoobar
の場合、req2.callbackが中止されます。
EM.stop
を適切に配置して、JSON文書に必要なものがあるかどうかを確認するにはどうすればよいですか?
require 'eventmachine'
require 'em-http'
loop do
EM.run do
c = EM::HttpRequest.new 'http://api.example.com/'
req1 = c.get :keepalive => true
req1.callback do
document = JSON.parse req1.response
if document.has_key? foobar
req2 = c.get :path => '/data/'
req2.callback do
puts [:success, 2, req2]
puts "\n\n\n"
EM.stop
end
end
end
end
sleep 10
end
私にとって完璧なソリューション!無限ループとスリープで「ハック」するよりも、この組み込み機能を使用する方が理にかなっています。 – pkhamre