php curl время ожидания ответа

Почему timeout для curl в php необходим

Имея проблему (4) + ситуацию с тем, что php не может ограничить время работы curl (3.2) и механизм работы fpm (1+2), ко всем curl-запросам необходимо установить тайм-аут запроса, иначе повисшие запросы могут занять весь пул процессов php-fpm и каждый новый запрос будет обрабатыватся с ответом 502.

В настройках curl их имеется следующие тайм-ауты:

В случае работы cli

Ситуация проще, но будет иметь свои побочные эфекты в зависимости от варианта запуска таких cli-комманд:

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответаP.S.

Архитектурно некорректно использовать curl прямо из web (fpm/apache), т.к. это устанавливает прямую связку между запросом пользователя из браузера + процессом + запросом с помощью curl вовне. Каждый из этих запросов имеет свои ограничения по тайм-аутам и эта конструкция может существовать стабильно только в идельных условиях (RAM на процессы никогда не закончится + сеть между сервером и клиентом идеальна + запрос curl обрабатывается очень быстро + curl всегда надежно получает ответы).

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Nginx, Php-Fpm и что это вообще?

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Капризы WebSocket и при чём здесь костыли

Протокол WebSocket имеет свои преимущества и свои недостатки: детальный разбор

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Установка PHP и модулей на Ubuntu/Debian

В Debian/Ubuntu это делается легко и просто, зачастую не требуется ничего собирать

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Как установить SSL-сертификат

В последнее время многие сайты переезжают на https и получают в связи с этим следующую проблему.

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Угадайте самый медленный фреймворк. И это не Laravel

Есть распространенное мнение, что Laravel почти самый медленный фреймворк, что даже его название нужно читать медленно и только одним пользователем на 1 ядро CPU. Но к счастью, это не так

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

IoT Highload: особенности и подводные камни

Особенности серверных приложений, работающих с сетью IoT-устройств на практике и в теории

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Nginx, Php-Fpm и что это вообще?

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Капризы WebSocket и при чём здесь костыли

Протокол WebSocket имеет свои преимущества и свои недостатки: детальный разбор

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Установка PHP и модулей на Ubuntu/Debian

В Debian/Ubuntu это делается легко и просто, зачастую не требуется ничего собирать

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Как установить SSL-сертификат

В последнее время многие сайты переезжают на https и получают в связи с этим следующую проблему.

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Угадайте самый медленный фреймворк. И это не Laravel

Есть распространенное мнение, что Laravel почти самый медленный фреймворк, что даже его название нужно читать медленно и только одним пользователем на 1 ядро CPU. Но к счастью, это не так

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

IoT Highload: особенности и подводные камни

Особенности серверных приложений, работающих с сетью IoT-устройств на практике и в теории

Источник

Setting Curl’s Timeout in PHP

I’m running a curl request on an eXist database through php. The dataset is very large, and as a result, the database consistently takes a long amount of time to return an XML response. To fix that, we set up a curl request, with what is supposed to be a long timeout.

However, the curl request consistently ends before the request is completed ( Follow

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

7 Answers 7

also don’t forget to enlarge time execution of php script self:

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Hmm, it looks to me like CURLOPT_TIMEOUT defines the amount of time that any cURL function is allowed to take to execute. I think you should actually be looking at CURLOPT_CONNECTTIMEOUT instead, since that tells cURL the maximum amount of time to wait for the connection to complete.

There is a quirk with this that might be relevant for some people. From the PHP docs comments.

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

You will need to make sure about timeouts between you and the file. In this case PHP and Curl.

In PHP, again, you must remove time limits or PHP it self (after 30 seconds by default) will kill the script along Curl’s request. This alone should fix your issue.
In addition, if you require data integrity, you could add a layer of security by using ignore_user_abort :

A client disconnection will interrupt the execution of the script and possibly damaging data,
eg. non-transitional database query, building a config file, ecc., while in your case it would download a partial file. and you might, or not, care about this.

Источник

Шпаргалка по метрикам производительности cURL: как измерить задержку сервера

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Первым результатом выдачи по запросу “curl time_pretransfer meaning” оказывается следующий пост со StackOverflow, в котором автор цитирует страницу из мануала cURL, но при этом остается в недоумении (как и я):

Тут можно подумать, что кто-нибудь уже написал хорошую статью по метрикам cURL.

В конечном итоге я все же выяснил значение time_pretransfer ….в чем мне помог дедуктивный анализ и… скорость света (0.299 км/мкс). Больше я нигде верного ответа не нашел. Ну а раз теперь он есть у меня, то я и делюсь им с вами в этой статье.

php curl время ожидания ответа. Смотреть фото php curl время ожидания ответа. Смотреть картинку php curl время ожидания ответа. Картинка про php curl время ожидания ответа. Фото php curl время ожидания ответа

Пример теста скорости в cURL

Скачайте curl-format.txt с GitHub и выполните следующую команду:

Все показатели времени с момента запуска cURL суммируются.

Что значит time_namelookup?

Эту метрику проанализировать несложно. Она отражает время просмотра DNS. Конечным результатом здесь будет IP-адрес целевого сервера, к которому должна обратиться cURL. Соединений с этим сервером пока не установлено.

Обратите внимание, что эта метрика является важным фактором в тесте скорости. Вы можете удивиться, если считаете, что это просто банальный просмотр DNS.

Как правило, поиск по DNS происходит очень быстро, потому что компьютер зачастую уже имеет кэшированный результат. Кэширование делается, потому что результаты поиска изменяются редко. Например, если для домена есть запись А, которая разрешается в IP, то компьютер может легко ее кэшировать – вся запись максимум займет 32 байта (а большинство ПК располагают гигабайтами памяти).

Однако просмотр DNS может занять и больше времени, если кэшированного результата в памяти компьютера нет. Это особенно актуально, когда у целевого сайта невысокий траффик, так как это означает, что на промежуточных маршрутизаторах результат просмотра DNS не кэширован, и они не могут вернуть его быстро. В одном из проведенных мной тестов скорости этот процесс занял 56% от всего времени скачивания (0.122108/0.217073 с.). И это невероятно высокий показатель. Я удивлен, что он получился столь велик. Тестирование проводилось в отношении моего собственного нового сайта, траффик которого реально очень низок. Следующий поиск по DNS занял всего 0.001408 с. Здесь уже определенно сработало кэширование.

Для тестов скорости CDN очень важно, чтобы операция просмотра DNS выполнялась. Поиск по DNS – это процесс, в котором CDN находит ближайший к вам IP-адрес сервера. Поэтому для одного и того же пути домена IP-адрес будет сильно отличаться в зависимости от вашего местоположения. Несмотря на то, что есть способ исключить просмотр DNS из операции cURL, указав IP-адрес как часть входных данных, так делать не стоит. Поиск DNS очень важен для работы CDN.

Писать об этом было довольно интересно. Я, наверное, как-нибудь займусь тестированием быстродействия DNS, хотя это будет уже посложнее, нежели просто тестировать скорость CDN.

Что значит time_connect?

Time_connect отражает длительность установки TCP-соединения с целевым сервером. На предыдущем шаге, просмотре DNS, мы получили только IP-адрес. На текущем этапе уже создаются сокеты и данные готовы для передачи между клиентом и сервером.

Обратите внимание, что эта процедура выполняется при каждом запросе, как для HTTP, так и для HTTPS, независимо от того, с какого сервера запрос поступает (Google, Facebook, Microsoft или любого рядового сервера на WordPress).

Что значит time_appconnect?

Эта метрика показывает продолжительность рукопожатия SSL, измеряемого только для HTTPS-запросов. Если выполнить запрос к HTTP URL, то cURL сообщит для time_appconnect значение 0.000…

Выполняется эта процедура для каждого HTTPS-запроса, независимо от его цели или отвечающего сервера, даже если это Google.

Что значит time_pretransfer?

По существу, time_pretransfer равнозначна либо time_appconnect (HTTPS), либо time_connect (HTTP) — в зависимости от того, выполняется HTTPS-запрос или HTTP. В этом вся ее суть. Между time_pretransfer и предыдущей стадией ничего не происходит.

Именно эта метрика меня по истине смутила. Мне никак не удавалось понять ее смысл, пока я не осознал, что…промежуток времени с предыдущей стадии слишком мал для наличия в нем какой-либо сетевой активности.

Почему я так уверен, что здесь задействуется только ЦП? Поскольку промежуток между time_pretransfer и time_appconnect очень мал, то даже если данные будут передаваться напрямую между двумя точками со скоростью света, то в него все равно не уложится их передача в оба конца.

Давайте посчитаем. Первым делом отметим, что в примере вывода cURL разница во времени между time_pretransfer и time_appconnect составляет всего 227 мкс. Если вы проверите сами, то она может составить даже всего 27 мкс (как видно из вывода cURL в соответствующем ишью на GitHub).

Второе, что мы возьмем в расчет – это скорость света в мкс. Скорость света составляет 300 000 км/с. В одной секунде содержится 1 миллион мкс, значит 300 000 км/с * 1 с/1 000 000 мкс = 0.299 км/мкс.

В завершении умножаем получаемое значение 227 мкс * 0.299 км/мкс = 67.87 км.

И это в оба конца, значит в одну сторону будет всего около 34 км. И это без учета того, что технически скорость передачи по оптоволокну составляет всего 0.69 от скорости света.

Да уж… Я сильно сомневаюсь, что в такой близости от меня располагается дата центр. Хоть я и нахожусь в крупном городе США, но все же не в одном из типичных вариантов вроде Сан-Франциско, Нью-Йорка, Лос-Анжелеса, Чикаго или Далласа.

Я считаю, что на данной стадии cURL скорее всего просто подготавливается к получению байтов – и все. В промежутке между time_pretransfer и time_appconnect вряд ли может происходить какой-то обмен байтами.

Что значит time_starttransfer?

По сути, продолжительность time_starttransfer – time_pretransfer представляет задержку. В частности, эта метрика измеряет, как быстро сервер может ответить на конкретный запрос cURL. Если вы работаете со стороны бэкенд, то именно эта метрика будет интересовать вас больше всего. Все остальные относятся к типичным операциям TCP или SSL, характерным для каждого сервера, а в качестве бэкенд-инженера повлиять на их быстродействие вы можете, разве что, арендовав дополнительные дорогостоящие сервера.

Time_starttransfer по своему существу аналогична Time To First Byte (TTFB), что отражает длительность подготовки сервера к ответу. Для бэкенд-инженеров данный термин тоже определенно известен. Это просто задержка, а уменьшение задержки очень важно.

Давайте рассмотрим пример оценки метрики time_starttransfer для CDN. Если запрашивать файл из CDN, то данная фаза будет отражать длительность подготовки сетью этого файла. В случае же, когда CDN ранее кэшировала файл в память, она его сможет вернуть быстро. Если же он был кэширован в слой SSD, то потребуется чуть больше времени. А может он вообще не кэширован, тогда сети потребуется выполнить собственный HTTP/HTTPS-запрос к серверу-источнику, где этот файл размещен. Итак, данный шаг очень важен при анализе отличий между разными CDN – все остальные показатели будут плюс-минус схожи.

Вот еще один пример. Предположим, что вы отправили запрос к Google Translate API для получения французского перевода английского предложения. В этом случае этап time_starttransfer – time_pretransfer отразит длительность выполнения перевода сервисом Google. Все предыдущие шаги будут представлять просто обычную настройку TCP-соединения, типичную для любого другого запроса.

Что значит time_redirect?

Если перенаправления нет, то и значение этого показателя будет 0.000.
Если же перенаправление присутствует, то отразится его продолжительность.

Для наших целей тестирования скорости CDN важно, чтобы показатель time_redirect был равен 0, потому что перенаправление не относится к факторам, влияющим на скорость скачивания CDN.

Что значит time_total?

Эта метрика очень прозрачна. Она просто отражает продолжительность всего процесса скачивания – начиная с запроса на просмотр DNS и вплоть до отправки клиентом разрыва соединения FIN ввиду завершения получения всех байтов.

Кстати, если вы используете cURL для тестирования скоростей CDN, то должны знать, что одного только выполнения cURL недостаточно для измерения скорости доставки CDN. Вам нужно оценить две метрики, а именно «1-ю скорость скачивания» и «скорость кэшированного скачивания», то есть выполнить около 11 вызовов cURL к одному URL. У меня есть более углубленная статья, где я объясняю свой метод тестирования (англ.).

Источник

PHP cURL требуется только для отправки и не ждать ответа

Мне нужна конфигурация PHP cURL, чтобы мой скрипт мог отправлять запросы и игнорировать ответы, отправленные API.

Я пробовал добавлять: // curl_setopt ($ch, CURLOPT_RETURNTRANSFER, false); //curl_setopt ($ch, CURLOPT_TIMEOUT_MS, 100);

но он не работает должным образом, и веб-сервер API не получает запросы.

причина этого в том, что я отправляю большое количество запросов в API, поэтому мой скрипт очень медленный, потому что он ждет каждого запроса.

любая помощь приветствуется.

5 ответов

ниже мы пытаемся просто сделать ping для php-скрипта, не дожидаясь ответа

Если возможно, вы можете запустить команды wget в фоновом режиме (с помощью exec)

немного поздно, но решение этого для всех заинтересованных в том, что CURLOPT_RETURNTRANSFER должно быть установлено в TRUE, а не false. Таким образом, функция curl_exec возвращает значение немедленно, а не ждет завершения запроса перед возвратом, т. е. действует асинхронно, а не синхронно.

Как вы можете сказать, удалось ли выполнить запрос или нет? Вам нужно дождаться, по крайней мере, кода состояния с сервера, чтобы определить это. Если проблема в задержке, посмотрите на curl multi API для выполнения нескольких запросов параллельно. Вы должны иметь возможность установить функцию обратного вызова записи для прерывания приема возвращенных данных после возврата кода состояния.

это хорошо работает для меня.
Протестировано на PHP 7.1.14 Windows

Источник

Методы PHP cURL время ожидания для некоторых URL-адресов, но командная строка всегда работает

Когда я пытаюсь использовать методы PHP cURL для НЕКОТОРЫХ URL-адресов, время ожидания истекает. Когда я использую командную строку для того же URL, он работает просто отлично.

Я использую AWS и у меня есть t2.medium box, на котором запущены библиотеки php-55 apache от yum.

Итак, вот вызов, который работает просто отлично:

И это возвращает данные для главной страницы Google.

Тем не менее, я пытаюсь другой URL:

И я получаю это в curllog:

Если я запускаю это из командной строки:

Это НЕМЕДЛЕННО возвращает (в течение 1 секунды) без выхода. Это ожидается. Однако, когда я запускаю это:

Он возвращает страницу правильно, как я хотел бы.

Итак, что не так с моим локоном?

Вот бит cURL из моего phpinfo ():

Решение

Я проверил вашу функцию curl() Кажется, хорошо. Не нужно ничего менять в функции. Что вам нужно сделать, это просто передать URL-адрес в качестве параметра, не нужно менять HTTPS в HTTP

Вы уже сказали curl не проверять SSL

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Дайте мне знать, если вам нужно какое-либо объяснение.

Другие решения

Подробный вывод показывает явную проблему тайм-аута:

Это сигнализирует о проблеме с настройкой вашей сети. Их сложнее найти, это может быть на вашем собственном конце (например, в контексте веб-сервера или исполняемого файла PHP) или на другом конце. Оба места возможны в определенной степени, однако сервер принимает оба запроса, даже если у них разные заголовки запроса, поэтому более вероятно, что это связано с контекстом выполнения, что также является общим описанием.

Проверьте, есть ли какие-либо ограничения на безопасность и другие сетевые уровни в отношении выполнения этих запросов через PHP. Например. попробуйте другой образ сервера, если вы не очень заинтересованы в системном администрировании и устранении неполадок. Из того, что поделено в вашем вопросе, трудно сказать, что именно вызывает ваш тайм-аут.

Попробуйте увеличить значения времени ожидания в следующих строках:

Это довольно короткие значения тайм-аута — CURLOPT_TIMEOUT специально ограничивает все время выполнения, попробуйте дать большие значения:

У вас есть 2 переменные

Первый, CURLOPT_CONNECTTIMEOUT максимально допустимое время подключения к серверу

Но это не очень хороший метод, если вы находитесь в производственной среде, потому что он никогда не истечет.

Максимальное количество секунд, которое разрешено выполнять функциям cURL.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *