Расчет времени обработки сервера с помощью Curl
Я получаю информацию о запросе времени с помощью curl, используя опцию --write-out
, как описано в этой статье.
Вот пример вывода из одного из моих запросов:
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
Мой вопрос: как определить, сколько времени сервер обрабатывал запрос? Ответ:
time_starttransfer - time-connect
То есть, время, с которого было установлено соединение, когда сервер начинает отправлять свой ответ? Это кажется правильным, но я хочу быть уверенным.
Подробные сведения о переменных крутильных колебаний можно найти здесь: http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html
Ответы
Ответ 1
Да, (time_starttransfer - time-connect) - время от подключения было замечено завиванием, пока не появился первый байт. Обратите внимание, что он также включает время передачи, поэтому для удаленного сайта он будет длиннее просто из-за этого.
Ответ 2
Я бы сказал, что вы правы, (time_starttransfer - time_connect) определенно является количеством времени, затраченного сервером на обработку запроса.
Однако - я также задавался вопросом, в чем разница между time_connect и time_pretransfer? (заинтригованный комментариями @Schwartzie и @Cheeso)
Посмотрев на несколько завихренных запросов в Интернете, я заметил, что иногда они равны, а иногда и нет.
Затем я понял (по крайней мере, я так считаю), что они отличаются только запросами HTTPS, заставляя серверу некоторое время расшифровывать уровень ssl, что не совсем то время, которое тратится на целевое приложение, а на время, затраченное на размещение сервера приложение/служба.
Время для дешифрования ssl (и для соединения также, указанное в time_connect) является time_appconnect, и только тогда, когда он 0 (например, для запросов без HTTPS) - time_connect и time_pretransfer являются EQUAL, в противном случае для запросов https они отличаются, и для https time_pretransfer будет равно time_appconnect (а не time_connect).
Проверьте следующие два примера:
-
curl -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
-
curl -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
поэтому я бы сказал, что time_pretransfer более точен для использования по сравнению с time_connect, так как он будет уважать ssl-соединения и, возможно, некоторые другие вещи, о которых я не знаю.
Со всеми предыдущими словами я бы сказал, что более точный ответ на вопрос:
- "Как определить, сколько времени сервер обработал запрос?"
вероятно, будет:
- time_starttransfer - time_pretransfer
как уже упоминалось @Schwartzie, я просто хотел понять, почему.