ruby – em-http-request – 我在哪里放置EventMachine.stop?
发布时间:2020-12-17 07:10:03 所属栏目:百科 来源:网络整理
导读:我想每隔10秒迭代一次 JSON-API,如果在 JSON数据中找到某个密钥,则使用相同的连接(keepalive)执行第二次HTTP请求.如果我没有将EM.stop放在我的代码中,程序会在req1.callback中完成处理后停止等待. 如果我将EM.stop放在req2.callback中,它可以工作并按预期迭
我想每隔10秒迭代一次
JSON-API,如果在
JSON数据中找到某个密钥,则使用相同的连接(keepalive)执行第二次HTTP请求.如果我没有将EM.stop放在我的代码中,程序会在req1.callback中完成处理后停止等待.
如果我将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 "nnn" EM.stop end end end end sleep 10 end 解决方法
如果要使用计时器,则应使用EM:
http://eventmachine.rubyforge.org/EventMachine.html#M000467的实际计时器支持
例如: require 'eventmachine' require 'em-http' EM.run do c = EM::HttpRequest.new 'http://google.com/' EM.add_periodic_timer(10) do # Your logic to be run every 10 seconds goes here! end end 这样,您可以保持EventMachine一直运行,而不必每10秒钟启动/停止一次. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |