Rails HTTP Ping 到不可靠的目标

Rails HTTP Ping to unreliable Target

我想向一个 IP 地址和端口发送一个 HTTP GET 请求,以确定是否有在线设备可以响应该地址。

我想要一个相对合理的超时,这样我的应用程序就不会在连接时挂起,如果没有的话。我一直在使用Net::HTTP,但是似乎没有办法在使用ip地址时设置超时。

res = Net::HTTP.get_response(ip_address, '/index.html', port)

在使用 ip 地址而不是域名时,是否有执行此请求的最佳实践或更好的方法或在 Net::HTTP 中设置超时的方法?

我在 Heroku 上使用 Ruby 2.1.5 和 Rails 4.1.0 托管。

不确定您要找什么。 Net::HTTP-class中有read_timeout-setter。看这里:http://docs.ruby-lang.org/en/2.1.0/Net/HTTP.html#method-i-read_timeout-3D

关于HTTParty可以看看gem。 gem 提供了许多选项并且易于使用。

您将请求的超时设置为 return 响应

response = HTTParty.get('https://www.google.co.in/', timeout: 60)

超时以秒为单位。

或者在 Net http 中你可以设置为,

uri = URI.parse(ip_address + '/index.html')
request = Net::HTTP::Get.new(uri.path)
begin
  response = Net::HTTP.start(uri.host, uri.port) {|http|
    http.read_timeout = 100 #Default is 60 seconds
    http.request(request)
  }
rescue Net::ReadTimeout => e  
   puts e.message
end

通过 ip 地址请求或通过 dns 名称请求之间没有重大区别,在后一种情况下,进行 DNS 查询并且通常设置 Host-header,然后通过 ip 完成该请求。

Net::HTTP 中有 open_timeout 设置,如果在此期间无法建立连接,则在设置时引发 Net::OpenTimeout。默认情况下它是 nil 这意味着 'forever'