Я пытаюсь сообщить о статусе задания, которое зависит от стороннего API, который использует обратные вызовы для сообщения о завершении.
API - это программа оптимизации изображений Kraken. ссылка
У меня сейчас есть такая установка:
- В
main.php
пользователь вводит несколько URL-адресов некоторых изображений, отправляет хиты - Ajax-вызов инициируется для
process.php
process.php
представляет отдельное задание в API Kraken для каждого изображения, которое включает URL-адрес изображения, а также имя файла обратного вызова callback.php
- API Kraken немедленно возвращает уникальный номер задания для каждого из изображений, например 12345
- (часть, в которой мне нужна помощь для выяснения).После успешного возврата из вызова ajax я постоянно запрашиваю обновления для задания, отображая ход выполнения для пользователя.
Я не могу использовать опцию ожидания, поскольку она обеспечивает плохой пользовательский опыт, ив зависимости от количества и размера изображений обработка API может привести к превышению времени ожидания задания php.
На этом этапе Kraken отключает сжатие изображения, а через несколько секунд оно завершается и публикует результаты.на callback.php
с номером задания и URL-адресом сжатого изображения.Например:
{
"id": "18fede37617a787649c3f60b9f1f280d"
"success": true,
"file_name": "header.jpg",
"original_size": 324520,
"kraked_size": 165358,
"saved_bytes": 159162,
"kraked_url": "http://dl.kraken.io/18/fe/de/37617a787649c3f60b9f1f280d/header.jpg"
}
Так как callback.php не знает о переменной $_SESSION
, а только об уникальном идентификаторе задания, как вы можете узнать о завершении задания внутри main.php
?
Текущие мысли
Создайте временный файл, названный в честь идентификатора задания, как только мы получим ответ с идентификатором задания от Кракена (или строку таблицы базы данных).Затем создайте массив $_SESSION
с записью для каждого идентификатора задания.
При запуске callback.php
он открывает этот временный файл с использованием предоставленного номера задания и добавляет URL-адрес сжатого изображения.Между тем, main.php
имеет механизм опроса js, который ищет обновления для этого временного файла, и когда он находит то, что ему нужно, обновляет переменную $_SESSION
для этого идентификатора задания и предоставляет пользователю ответ в виде <textarea>
(которыйможет быть URL нового изображения или сообщение об ошибке, если Kraken не удалось оптимизировать изображение)