Fqyeh29
@Fqyeh29
↓ ИМХО ↓

Запустить функции асинхронно с получением результата(php)?

В движке реализована подгруздка цен у поставщиков через API. Цены подгружаются в момент запроса товара клиентом.(нет, запрашивать раз в сутки/час/минуту нельзя)

Сейчас работают 3 поставщика, и выводится самая низкая цена. Проблема в том, что запросы к поставщикам идет поочередно, и занимает 5-20 сек. И т.е перед получением цены клиент ждет 5-20 сек загрузки страницы(пришлось сделать прелоадер чтоб клиент не думал что сайт "завис"). Хочу сделать чтобы запросы к поставщикам шли асинхронно. Есть ли возможность запустить 3 функции одновременно , и когда все 3 поставщика ответят, записать результат в массив и продолжить работу?

(сейчас 2 поставщика работают через Json, POST запросом. А один SOAP запросом возвращает XML)
  • Вопрос задан
  • 279 просмотров
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
curl_multi или какая-нибудь обёртка поверх - сам по себе не очень удобен.
С soap сложнее. Можно поковырять nusoap реализацию, нельзя ли вытянуть curl_exec во внешний мир.

Можно уйти в модные микросервисы: написать для каждого поставщика транзитный микросервис, который делает запрос к его апи, перекодирует в ваш внутренний формат. Мультикурлом запросить ваши микросервисы. Поставщик, соответственно, может давать любое синхронное апи, вы всё равно сможете всех опрашивать одновременно.

Можно порыться и именно в многопоточный код, pecl pthreads даёт такую возможность в php.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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