2013-07-14 6 views
12

Je reçois des informations de temporisation de requête avec curl en utilisant l'option --write-out comme décrit in this article.Calcul du temps de traitement du serveur avec Curl

Voici un exemple de sortie d'un de mes demandes:

 time_namelookup: 0.031 
      time_connect: 0.328 
     time_appconnect: 1.560 
     time_pretransfer: 1.560 
      time_redirect: 0.000 
    time_starttransfer: 1.903 
         ---------- 
      time_total: 2.075 

Ma question est: Comment puis-je déterminer combien de temps le serveur a pris le traitement de la demande? La réponse est:

time_starttransfer - time-connect 

C'est, le moment à partir duquel la connexion a été établie au moment où le serveur à partir d'envoyer sa réponse? Cela semble correct mais je veux être sûr.

Détails sur les variables temporelles papillotes se trouvent ici: http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html

+3

J'ai essayé de comprendre cela aussi. J'ai trouvé que les descriptions des temps sur http://curl.haxx.se/docs/manpage.html sont plus faciles à lire. Ma meilleure estimation actuelle pour le temps de traitement à distance est 'time_starttransfer - time_pretransfer'. Ma compréhension est que 'time_pretransfer - time_connect' comprend également le temps qu'il faut pour envoyer la demande. – Schwartzie

Répondre

9

Oui, (time_starttransfer - temps de connexion) est le moment de la connexion a été remarqué par boucle jusqu'à ce que le premier octet est arrivé. Notez qu'il comprend également le temps de transfert, donc pour un site distant, il sera plus long simplement à cause de cela.

+1

re: "cela inclut aussi le temps de transfert" - quel temps de transfert? Le transfert de la demande? Ou le transfert de réponse? Ou les deux? La page de manuel curl n'est pas claire. Il est dit, par exemple, pour time_pretransfer, "Le temps, en secondes, qu'il a fallu depuis le début jusqu'à ce que le transfert de fichier soit sur le point de commencer.Ceci inclut toutes les commandes pré-transfert et les négociations spécifiques au (x) protocole (s) particulier (s) impliqué." Quel transfert de fichier? demande ou réponse? Et quel est le "fichier"? – Cheeso

2

Je dirais que vous avez raison, (time_starttransfer - time_connect) est certainement une quantité de temps que le serveur a pris pour traiter la demande.

Cependant - Je me suis également demandé quelle est la différence entre time_connect et time_pretransfer? (intrigué par @Schwartzie et commentaires @Cheeso)

En regardant plusieurs requêtes curl sur le web, j'ai observé que parfois ils sont égaux et parfois ils ne le sont pas. Puis j'ai compris (du moins je crois) qu'ils diffèrent seulement pour les requêtes HTTPS, car le serveur a besoin de temps pour décrypter la couche SSL, ce qui n'est pas exactement le temps passé par l'application cible mais le temps passé par le serveur héberger l'application/service. Le temps pour décrypter ssl (et se connecter aussi, celui donné dans time_connect) est time_appconnect, et seulement quand c'est 0 (comme pour les requêtes non-https) - time_connect et time_pretransfer sont EQUAL, sinon pour les requêtes https ils diffèrent , et pour https time_pretansfer serait égal à time_appconnect (et pas à time_connect).

Vérifiez les deux exemples suivants:

  • boucle -kso/dev/null -w "time_connect =% {time_connect}, time_appconnect:% {time_appconnect}, time_pretransfer =% {time_pretransfer} \ n" http://www.csh.rit.edu

    • time_connect = 0,128, time_appconnect: 0,000, time_pretransfer = 0,128
  • boucle -kso/dev/null -w "Time_connect =% {time_connect}, time_appconnect:% {time_appconnect}, time_pretransfer =% {time_pretransfer} \ n" https://www.csh.rit.edu

    • time_connect = 0,133, time_appconnect: 0,577, time_pretransfer = 0.577

donc je dirais que time_pretransfer est plus précis à utiliser par rapport à time_connect car il va respecter les connexions ssl aussi, et peut-être d'autres choses que je ne suis pas au courant.

Avec toutes les précédentes étant dit, je dirais que cette réponse plus précise pour la question:

  • « Comment puis-je déterminer combien de temps le serveur a pris le traitement de la demande? »

serait probablement:

  • time_starttransfer - time_pretransfer

comme @Schwartzie déjà mentionné, je voulais juste comprendre pourquoi.