#php #multithreading #apache #google-checkout
#php #многопоточность #апач #google-проверка #apache
Вопрос:
Все оборвалось: необходимо выполнить функцию примерно через 5 минут после запроса, отправленного службой уведомлений Google Checkout.
Почему: Для работы History API требуется, чтобы транзакция была по крайней мере 5-минутной давности.
Что было опробовано, приостанавливая функцию с помощью sleep, но это генерирует ошибку ТАЙМ-аута в конце Google.
Основная проблема: функция должна выполняться, даже если пользователь переходит со страницы, перезагружает страницу, закрывает свой браузер или выходит из системы с Сайта..
Пробовал, погуглил, но толку мало.. Есть какие-нибудь идеи??
Комментарии:
1.
ignore_user_abort(TRUE)
позволяет вашему скрипту продолжать выполняться после отключения удаленного пользователя.2. Кроме того, есть ли лучший способ задать этот вопрос?
Ответ №1:
Похоже, это задача для cron. Вот возможный план реализации:
- Когда Google отправит уведомление о проверке, запишите детали уведомления и временную метку в свою базу данных.
- Настройте скрипт для запуска с помощью cron. Скрипт проверит базу данных на наличие новых уведомлений о проверке, которым не менее 5 минут.
- Затем скрипт получит доступ к History API для этих совпадающих записей, а затем пометит эти записи в базе данных, чтобы к ним больше не обращались при следующем запуске задания cron.
Задание cron может быть настроено на выполнение с любым интервалом, который вам нравится. Чем меньше интервал, тем быстрее будут выполняться запросы API истории, поскольку уведомления о проверке достигают 5-минутного возраста. Ваш cron-скрипт может записать результат запроса API истории в вашу базу данных, чтобы ваш веб-интерфейс мог извлечь его и показать пользователю.
Комментарии:
1. cron имеет детализацию в 1 минуту, поэтому технически это не «любой интервал».