Передо мной была поставлена задача перестроить приложение (CakePHP 2.0, php 5.6), которое получает запрос, переформатирует / сопоставляет тело с полями, специфичными для API, и выполняет запросы к нескольким API с новым сопоставленным телом.
Как только ответы возвращаются, они будут декодированы и помещены в выходной массив как ответ от приложения.
В настоящее время процесс декодирования (сопоставления из определенных полей API) происходит последовательно, как только возвращаются запросы Multicurl.
Моя идея состоит в том, чтобы обрабатывать ответы и как только они приходят, и я пытаюсь сделать это параллельно.
Одна сложность состоит в том, что каждому целевому API нужны 4 очень специфические функции отображения, поэтому у каждого объекта API есть карта и обратная карта для 2 различных операций.
Требование клиента состоит в том, чтобы иметь минимальное количество зависимостей, решение должно быть предпочтительно в сыром php, библиотеки не нужны.
Решение KISS было запрошено.
Я рассмотрел следующие подходы, но все они имеют недостатки.
Multicurl ждет самого медленного ответа, чтобы вернуть все ответы. Это текущий подход, без параллельной обработки ответов.
pthreads не совместим с Apache, только для командной строки.
Не может легко передавать сложные объекты (объект API) через сокеты.
Слишком много зависимостей и / или слишком незрелых.
а) Appserver
б) Кракен
в) RabbitMQ
d) socket.io
Я ищу PHP 7 (ничего больше) альтернативы этой задаче.
Какие-либо предложения?
Стоит отметить, что «параллельный» и «асинхронный» являются отдельными понятиями.
Например: ReactPHP и его аналог [node.js Включено] являются асинхронными, но все еще однопоточными, полагаясь на циклы событий, обратные вызовы и сопрограммы, чтобы разрешить выполнение кода вне порядка.
Отвечая на вашу оценку подходов:
curl_multi()
,
pthreads
несовместим с Apache, это то, что он несовместим с mod_php
,
serialize()
это один из вариантов.json_encode()
будет путь, чтобы пойти.Других решений пока нет …