2015-11-09 28 views
7

Qui di seguito è un piccolo set di dati da cui sto cercando di rispondere a due domande:Come si può approssimare il tempo di connessione proxy per una richiesta cURL utilizzando i valori CURLINFO _ * _ TIME?

  1. Quanto tempo ha il proxy vuole per connettersi al server API?
  2. Quanto tempo ha richiesto la richiesta dell'API per tornare?

Il codice di base si presenta così:

$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 

Da quanto sopra costruisco questo:

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.44.000000  0.577812 

quanto tempo è stato speso per delega vs. richiesta API per ciascuno dei sopra ?


Il cURL Documentation è utile ma non sono sicuro di come rispondere alle mie domande di cui sopra con relativa sezione dalla documentazione:

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. 

Il grafico incluso è utile per vedere come questi tempi stack up :

Ma non sono ancora sicuro di quale attribuire il tempo di connessione proxy. Ecco la stessa tabella con i miei commenti:

| 
|--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 (???) 

Ecco una chart di come HTTP Proxy lavoro. Dove si collocano gli elementi CURLINFO _ * _ TIME sopra in questo grafico?

HTTP Proxies

risposta

2

non credo che ci sia alcun modo per calcolare con precisione quello che stai cercando.

cURL si collega al proxy, invia la richiesta e attende la risposta. Tutto ciò che il proxy fa in termini di tempo (è la propria risoluzione DNS, connettendosi all'host, inviando (proxy) la richiesta, aspettando la risposta, leggendo la risposta e inoltrandola di nuovo è una scatola nera per cURL.

Là c'è modo di sapere quanto a lungo una di queste fasi ha preso singolarmente dal solo/SOCKS proxy HTTP.

l'unica cosa esattamente si può sapere è la somma di tutte quelle azioni (CURLINFO_TOTAL_TIME - CURLINFO_STARTTRANSFER_TIME). suppongo che sarebbe addirittura possibile che ci possa essere un leggero ritardo dal momento in cui il proxy finisce la richiesta a quando cURL ottiene il primo byte indietro (cache forse?)

Un'altra possibilità non sono del tutto sicuro di, (potrebbe dipendere dalla configurazione del proxy e dalle intestazioni di risposta inviate dall'API), è quando il proxy effettivamente invia i dati indietro. Potrebbe essere necessario scaricare l'intera risposta HTTP, oppure potrebbe iniziare a inviare intestazioni e dati mentre li legge. Ciò potrebbe comportare alcune differenze potenzialmente significative nei calcoli.

In definitiva, penso che la linea di fondo è perché non ci sono dettagli di connessione dal proxy, non c'è modo di conoscere o approssimare accuratamente la durata della connessione proxy all'API e quanto tempo è occorso per ottenere una risposta .Altrimenti, hai ragione sul fatto che TOTAL - STARTTRANSFER è la tua migliore approssimazione per il tempo di risposta se stai usando un proxy.

Senza sapere esattamente cosa si sta cercando di fare o perché, forse la soluzione migliore sarebbe quella di affittare alcune istanze VPS o cloud in varie località geografiche per eseguire alcune istanze PHP utilizzando cURL per connettersi direttamente all'API in modo da avere accesso a tutte le metriche che stai cercando.

Problemi correlati