>代理连接到API服务器需要多长时间?
> API请求需要多长时间才能返回?
基本代码如下所示:
$c = curl_init(); // assume all options set correctly $time = microtime(true); $response = curl_exec($c); $curl_info = curl_getinfo($c); // Returns each `*_TIME` field $response_time = microtime(true)-$time; // Returns total PHP execution time
从上面我建立了这个:
id response_time NAMELOOKUP_TIME CONNECT_TIME APPCONNECT_TIME PRETRANSFER_TIME STARTTRANSFER_TIME REDIRECT_TIME TOTAL_TIME 1 0.250691 0.000191 0.025070 NULL 0.181040 0.250239 0.000000 0.250306 2 0.958577 0.000129 0.022764 NULL 0.136846 0.664099 0.000000 0.957881 3 0.578614 0.000053 0.021111 NULL 0.127998 0.440123 0.000000 0.577812
代理与api请求花费了多少时间用于上述每一项?
cURL Documentation很有帮助,但我不确定如何使用文档中的相关部分回答上述问题:
TOTAL_TIME Total time of prevIoUs transfer. NAMELOOKUP_TIME Time from start until name resolving completed. CONNECT_TIME Time from start until remote host or proxy completed. APPCONNECT_TIME Time from start until SSL/SSH handshake completed. PRETRANSFER_TIME Time from start until just before the transfer begins. STARTTRANSFER_TIME Time from start until just when the first byte is received. REDIRECT_TIME Time taken for all redirect steps before the final transfer.
包含的图表有助于了解这些时间如何叠加:
| |--NAMELOOKUP |--|--CONNECT |--|--|--APPCONNECT |--|--|--|--PRETRANSFER |--|--|--|--|--STARTTRANSFER |--|--|--|--|--|--TOTAL |--|--|--|--|--|--REDIRECT
但我仍然不确定将代理连接时间归因于哪个.这是与我的评论相同的图表:
| |--NAMELOOKUP // DNS,clearly not proxy. Also insignificant values. |--|--CONNECT // Does this count toward Proxy Time? |--|--|--APPCONNECT // Not set (likely due to non-https transaction) |--|--|--|--PRETRANSFER // Does this count toward Proxy Time? |--|--|--|--|--STARTTRANSFER // Stop proxy time? So Proxy Time = STARTTRANSFER? |--|--|--|--|--|--TOTAL // Would TOTAL-STARTRANSFER = API Request Time? |--|--|--|--|--|--REDIRECT // Always 0 (???)
这是HTTP代理如何工作的chart.以上CURLINFO _ * _ TIME项目在哪里适合此图表?
解决方法
cURL连接到代理,发送请求并等待响应.代理执行时间的所有操作(它自己的DNS解析,连接到主机,发送(代理)请求,等待回复,读取回复,并将其代理回来是cURL的黑盒子.
无法知道这些步骤中的任何一个单独从HTTP / SOCKS代理中单独使用多长时间.
您唯一可以准确知道的是所有这些操作的总和(CURLINFO_TOTAL_TIME – CURLINFO_STARTTRANSFER_TIME).我想甚至有可能从代理完成请求到cURL返回第一个字节(可能缓存?)时会有一点延迟.
我不太确定的另一种可能性(可能取决于代理配置和API发送的响应头)是代理实际发回数据的时候.它可能需要下载整个HTTP响应,或者它可能在读取时开始发送标头和数据.这可能会导致计算中出现一些潜在的显着差异.
最后,我认为底线是因为您没有来自代理的连接详细信息,无法知道或准确地估计与API的代理连接所花费的时间,以及获取响应所需的时间.否则,您是正确的,如果您使用代理,则TOTAL – STARTTRANSFER是响应时间的最佳近似值.
在不确切知道您要做什么或为什么做的情况下,也许您最好的选择是在不同的地理位置租用一些VPS或云实例来运行一些PHP实例,使用cURL直接连接到API,这样您就可以访问所有您正在寻找的指标.