我使用a gem从Ideone.com获取代码结果。 gem将代码提交给Ideone,然后检查结果页面。它检查timeout
次,然后放弃,如果没有结果。问题是它可能会放弃得太早,但如果不会有结果,我也不希望它太久。有没有办法知道什么时候该放弃希望?何时放弃从外部Web服务获取结果?
这是相关代码:
begin
sleep 3 if i > 0
res = JSON.load(
Net::HTTP.post_form(
URI.parse("http://ideone.com/ideone/Index/view/id/#{loc}/ajax/1"),
{}
).body
)
i += 1
end while res['status'] != '0' && i < timeout
if i == timeout
raise IdeoneError, "Timed out while waiting for code result."
end
谢谢。我已经把宝石分出来让它工作。所以我想我应该降低延迟并提高尝试次数?我想知道是否有更好的方法知道什么时候放弃。 – Ari
我认为每3秒更频繁地重试一次是没有意义的。我甚至会增加它。 只有您可以决定可以等待多久的结果。 这段代码是同步的,它会阻塞直到超时指定。 如果您从某个后台任务的ruby脚本运行此代码 - 您可以等待相当长的时间。像3-5分钟。 但是,如果代码是作为处理真实用户http请求的一部分运行的,那么您通常不希望等待。即使1秒也是太多。因此,使用服务器端推送或ajax长轮询来实现一些异步检查是正确的。 – cryo28
它是一个ajax请求,但用户将等待结果。理想情况下,我想在几秒钟内给他们,但最好迟到,而不是“超时错误”。不知道最好的方法来避免错误。 – Ari