Rails net/http 的超时的问题

jiek85 · 2012年11月13日 · 最后由 zhangjinzhu 回复于 2012年11月14日 · 5127 次阅读

Net::HTTP.get(URI.parse('http://www.baidu.com'))

如果执行这个请求的 server 不能上网,将会等待很行时间才报错,查了下源码有个@open_timeout,但是在 app 中覆盖了这个@open_timeout不生效,如何能短时间内报错呢,求解!!

rub 版本:ree1.8.7

这个好像是个难题,帮你顶。也许你可以自己程序中定时检查下。

~~这个好像是个难题,帮你顶。也许你可以自己程序中定时检查下。~~

ruby1.9 的话有 read_timeout 参数

例子一下:

Net::HTTP.start('www.twitter.com', open_timeout: 1, read_timeout: 1){|h| h.get '/'}

open_timeout 是建立连接的超时 read_timeout 是建立连接后读取数据的超时

#4 楼 @luikore open_timeout: 1, 这个写法是新的么,后面带一个冒号。

#5 楼 @chenge 出来有 3 年多了吧... 相当于 :open_timeout => 1

#6 楼 @luikore 这个漂亮。我是有几年没接触 ruby 了。可读性更好了。

#4 楼 @luikore 呵呵,我在项目中 把 net/http 里边的 initialize 的 open_timeout,read_timeout 都给重新定义值了,好像没其作用。。。。。

@jiek85

通用解决方案

require 'timeout' timeout(2) { sleep 3 }

需要 登录 后方可回复, 如果你还没有账号请 注册新账号