#php #curl #http-pipelining
#php #curl #http-конвейерная обработка
Вопрос:
Я пытаюсь использовать функцию конвейерной обработки HTTP PHP cURL для выполнения нескольких запросов через одно TCP-соединение. Ссылается на эту страницу http://www.php.net/manual/en/function.curl-multi-setopt.php Я включаю pipleining для curl_multi_exec(), добавив:
curl_multi_setopt($mh, CURLMOPT_PIPELINING, 1);
Я не хочу публиковать здесь большой список исходных текстов, но вы можете легко просмотреть или оформить заказ на полный пример с моего github здесь https://github.com/anovikov1984/pipelining-example
Для мониторинга TCP-соединений я использую команду ‘netstat -t -u -c’ в другом сеансе консоли.
В моем репозитории, о котором я упоминал выше, есть два сценария. Один для Ruby и один для PHP. Версия Ruby работает так, как требуется, и открывает только одно TCP-соединение для 3 запросов GET. Но версия PHP cURL открывает столько TCP-соединений, сколько дескрипторов cURL передано функции curl_multi_exec().
Что я делаю не так?
Комментарии:
1. Может быть, добавление
KEEP-ALIVE
поможет? Не уверен.. думаю, это включено по умолчанию. Не могли бы вы добавить веб-сервер, пожалуйста, и на основе fastcgi или mod.2. Почему вас волнует, сколько tcp-соединений установлено стабильно?
Ответ №1:
Похоже, что это может быть ошибкой в реализации PHP curl_multi_ * с конвейерной обработкой. Похоже, что они могут не предоставлять все КОНСТАНТЫ, необходимые для того, чтобы разработчик мог диктовать, как curl ведет себя при многократном запросе при использовании конвейерной обработки.
Я отправил отчет об ошибке здесь: https://bugs.php.net/bug.php?id=68449
Комментарии:
1. Когда вы отправляете отчет об ошибке в систему отслеживания ошибок, в отчете должно быть указано, в чем проблема, а не просто ссылка на обсуждение на другом веб-сайте для описания проблемы. В частности, заголовок сообщения об ошибке должен быть конкретным, а не просто общим термином.
2. Я приношу свои извинения. Я подумал, что опция «Пакет» уместна. Обратите внимание, что опция Package была помечена как «связанная с cURL». Над ссылкой есть краткое описание. Прошу прощения, если это было непонятно. Если бы кто-то действительно обрабатывал ошибку и чувствовал, что ошибка была неясной, разве они обычно не открывали бы поток со мной по этому запросу, чтобы получить дополнительную информацию, вместо того, чтобы переводить этот разговор в Stack Overflow? Не стесняйтесь обновлять тикет об ошибке, чтобы отразить более подходящее описание, чтобы я мог узнать, как это сделать для дальнейшего использования.
3. Мой комментарий был просто как наблюдателя, я не имею никакого отношения к проектам Php или Curl, поэтому я не испытываю никаких обид. Просто задумано как подсказка о том, как вы могли бы привлечь больше внимания к своим отчетам об ошибках.