我正在使用a gem从Ideone.com获取代码结果。 gem将代码提交给Ideone,然后检查结果页面。它检查timeout
次,然后放弃,如果没有结果。问题是它可能会过早放弃,但如果没有结果,我也不希望它等待太久。有没有办法知道何时应该放弃希望?
这是相关代码:
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
答案 0 :(得分:1)
听起来你想调整睡眠超时和尝试次数参数。没有适用于每种情况的绝对值,因此您应该选择一些最适合您的应用。
不幸的是,宝石代码具有硬编码的这些参数(3秒延迟和4次尝试),因此您没有一种优雅的方式来更改它们。因此,您可以分叉gem并更改其代码,或者尝试使用http://apidock.com/ruby/Module/const_set对TIMEOUT常量值进行修补。但是,如果没有重写方法.run的宝石,你将无法修补尝试之间的延迟值。
FYI。 Net :: HTTP有自己的超时 - 等待ideone.com连接和响应的时间。如果超出它们,Net :: HTTP会引发超时异常。安装者是
http://ruby-doc.org/stdlib-2.0/libdoc/net/http/rdoc/Net/HTTP.html#method-i-read_timeout-3D和#open_timeout =。