fornit1917
@fornit1917

Почему не работают параллельные запросы?

Использую php и Guzzle 3 для получения данных со множества ссылок. К сожалению не могу использовать Guzzle 4, ибо php 5.3. И рад бы обновиться, но в данном случае такой возможности у меня нет.
Для увеличения скорости логично отправлять запросы по ссылкам параллельно, что вроде бы позволяет Guzzle 3, если ему передавать не один запрос, а массив запросов (guzzle3.readthedocs.org/http-client/client.html#se... ). Только вот скорость выполнения скрипта у меня все равно такая же не высокая, как если бы я отправлял запросы последовательно. ЧЯДНТ?

UPD: в итоге оказалось, что проблема не в Guzzle, а в том, что в этот день жутко тормозил сайт который я парсил))). А параллельные запросы в Guzzle работают отлично.
  • Вопрос задан
  • 3482 просмотра
Пригласить эксперта
Ответы на вопрос 3
akubintsev
@akubintsev
Опытный backend разработчик
Внутри одного потока/воркера curl работает в синхронном режиме.
Вам нужно копать либо в сторону асинхронной реализации, что приведёт к написанию демона на ReactPHP скорее всего, либо в сторону многопоточности, либо вообще в другой ЯП.

Пример полуфабриката, который вы могли бы взять на вооружение https://github.com/kryoz/socket2http . На 5.3 может не завестись, но только из-за синтаксиса в некоторых местах.
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Если Вам нужны параллельные запросы - есть curl_multi php.net/manual/ru/function.curl-multi-init.php
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Да, если вы прописываете массив реквестов, Guzzle будет пытаться все это дело отправлять через curl_multi собственно как и в примере.

Так же почитайте вот это:
guzzle3.readthedocs.org/en/latest/batching/batchin...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы