计算ping网站时的响应时间(Ruby)

时间:2012-04-19 08:00:30

标签: ruby sockets ping

我在ruby中编写了以下代码来ping网站并检查响应。如果响应成真,网站反应良好,但如果错误则显示网站没有响应。

require 'net/http'
require 'uri'


def ping(host)
begin
 url=URI.parse(host)
 response=Net::HTTP.get(url)
   if response==""
     return false
   else
     return true
   end
   rescue Errno::ECONNREFUSED
     return false
 end
end

此代码工作正常,但无法计算网站响应的停留时间。

所以我的问题是如何计算网站响应的响应时间?

3 个答案:

答案 0 :(得分:5)

require 'net/http'
require 'uri'

def ping(host)
  begin
    url = URI.parse(host)
    start_time = Time.now
    response = Net::HTTP.get(url)
    end_time = Time.now - start_time

    if response==""
      return false
    else
      puts "response time : #{end_time}"
      return true
    end

  rescue Errno::ECONNREFUSED
    return false
  end
end

ping "http://www.google.com"

希望这有帮助

答案 1 :(得分:1)

如果在url = URI.parse(host)之后和响应之后添加Time.now?

答案 2 :(得分:0)

这里建议的答案没有显示服务器响应时间,它显示:

  • 红宝石发送请求所花费的时间
  • 请求的网络时间
  • 服务器的响应时间
  • 响应的网络时间
  • 在ruby中处理响应所花费的时间

如果您只需要查看服务器处理请求所花费的时间,您需要以其他方式执行此操作。您可以使用curl show。特别是日期标题可以帮助您。

我建议使用response_time_total = `curl -w \"%{time_total}\" google.com -o /dev/null -s`

curl -w \"%{time_total}\n\" google.com -o /dev/null -s

您可以在终端试用:

time_namelookup

您可以获得不同的指标,例如time_connecttime_starttransfertime_redirectresponse_times = `curl -w \"%{time_connect}:%{time_starttransfer}:%{time_total}\" google.com -o /dev/null -s` time_connect, time_starttransfer, time_total = response_times.split(':') 等。示例:

array([0.00000000e+00, 1.00743814e-04, 2.01487627e-04, 2.20497985e+01,
       2.20498993e+01, 2.20500000e+01])

所有可用的指标和详细信息均可在response headers

找到

参考

the cURL manpage

How do I get a server's response time?