gpt4 book ai didi

ruby - em-http-request - 我应该把我的 EventMachine.stop 放在哪里?

转载 作者:数据小太阳 更新时间:2023-10-29 07:36:43 26 4
gpt4 key购买 nike

我想每 10 秒迭代一次 JSON-API,如果在 JSON 数据中找到某个键​​,则使用相同的连接(保持事件)执行第二个 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 "\n\n\n"
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 秒启动/停止一次。

关于ruby - em-http-request - 我应该把我的 EventMachine.stop 放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10316882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com