有没有办法在Ruby中获取HTTP请求的时间细分?

时间:2016-09-23 21:29:34

标签: ruby http httparty

gem的HTTParty和内置的Ruby Net :: HTTP似乎没有暴露HTTP请求中的时序细分。

例如,curl暴露:

  

time_appconnect从开始到SSL / SSH / etc连接/握手到远程主机的时间(以秒为单位)已完成。 (在7.19.0中添加)

     

time_connect从开始到TCP连接到远程主机(或代理)的时间(以秒为单位)已完成。

     

time_namelookup从开始到名称解析完成所用的时间(以秒为单位)。

     

time_pretransfer从开始到文件传输即将开始所用的时间(以秒为单位)。这包括特定于所涉及的特定协议的所有预转移命令和协商。

     

time_redirect所有重定向步骤所花费的时间(以秒为单位)包括在最终事务启动之前进行名称查找,连接,预传输和传输。 time_redirect显示多个重定向的完整执行时间。 (在7.12.3中添加)

     

time_starttransfer从开始到第一个字节即将传输所用的时间(以秒为单位)。这包括time_pretransfer以及服务器计算结果所需的时间。

     

time_total完整操作持续的总时间(以秒为单位)。时间将以毫秒分辨率显示。

有没有办法从Ruby或gem中获取DNS,TLS,SSL和握手等时序?

2 个答案:

答案 0 :(得分:2)

你应该使用Typhoeus,它是libcurl的Ruby包装器。 http://www.rubydoc.info/github/typhoeus/typhoeus/Typhoeus/Response

它将为您提供您在响应对象上寻找的时间;例如appconnect_time,connect_time,namelookup_time等。

答案 1 :(得分:0)

不,Net :: HTTP不会公开此类信息。

一种可能的(虽然不是很实用)解决方案是使用例如ruby-prof来配置脚本以获取每个方法调用的时间,并确定每个阶段的执行时间。