我想每10秒迭代一次JSON-API,並且如果在JSON數據中找到某個鍵,則使用相同的連接(keepalive)執行第二個HTTP請求。如果我沒有在我的代碼中放置EM.stop
,則在完成req1.callback中的處理後,程序停止等待。em-http-request - 我在哪裏放置EventMachine.stop?
如果我把EM.stop
放在req2.callback
裏面,它的工作原理和迭代方式和預期的一樣。
但是,如果JSON文檔沒有包含密鑰foobar
,程序會在req1.callback中完成處理後停止等待。
如果我在req1.callback的最後一行中添加EM.stop
,如果JSON文檔的密鑰爲foobar
,則會中止req2.callback。
如果JSON文檔具有我想要或不想要的東西,我應該如何正確放置EM.stop
以使其迭代?
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 2012-04-25 20:24:11