Мое приложение обрабатывает заказы, и в процессе я бы хотел, чтобы он отправил данные о бронировании в зависимости от того, кто из партнеров моего приложения сделал заказ, поэтому они могут хранить ссылку на бронирование, и не задерживать другую обработку, которую нужно сделать моему приложению.
Я подумал о том, как отправить сообщение партнеру, и моим решением было бы отправить запрос cURL POST в зависимости от того, какой из моих партнеров совершает бронирование (помимо ответа на мой вопрос, возможно, у кого-то есть лучшее решение, чем это?) .
У каждого партнера будет определенный URL-адрес, который они будут устанавливать для получения этого запроса POST и хранения информации о бронировании, которую мы отправляем.
ПРОБЛЕМА: Если мы попробуем отправить этот запрос POST, и их веб-сервер будет медленным или вниз, мы можем ждать слишком долго, чтобы получить ответ, который, в свою очередь, задержит подтверждение бронирования фактического пользователя с использованием нашего сервиса.
ИДЕАЛЬНОЕ РЕШЕНИЕ: Я хотел бы отправить этот запрос PHP cURL в другой поток, чтобы мы могли продолжить наш весёлый путь и подтвердить бронирование. Если в другом потоке есть задержка, это не остановит нас.
Другие решения, которые я рассматривал:
Было бы здорово получить некоторые отзывы о том, чего я пытаюсь выполнить здесь, особенно от тех, кто нуждается в решении для той же ситуации, в которой я нахожусь. Спасибо за любую помощь!
Таким образом, вы создаете API на PHP, который потребляют другие клиенты. вот что я хотел бы предложить:
Пусть ваши клиенты обращаются к вам с помощью метода POST / GET; вместо вас, как сервера API, пытающегося передать данные вашим клиентам. это гораздо лучший подход, потому что он освобождает вас от того, что сервер клиента работает, медленный или что-то еще. Поэтому, когда они отправляют вам запрос, это означает, что они полностью способны обрабатывать ответ.
используйте HTTP-постоянное соединение: в apache его имя keep-alive
устанавливает его значение в high, поэтому клиенты могут повторно использовать существующее соединение и, следовательно, уменьшить задержку.
Для многопроцессорной обработки в php см. « Получение многопроцессорности» . В принципе, существует pcntl_fork()
которая позволяет вам pcntl_fork()
процесс и создать новый дочерний процесс для многопроцессорной обработки.
Внедрение фонового задания на основе redis или чего-то подобного. идея заключается в том, что все длительные рабочие задания попадают в фоновый задание, а затем для каждой задачи создается работник, поэтому эти задания выполняются посредством многопроцессорной обработки. Работники PHP с Redis & Solo
Надеюсь, поможет
Как насчет наличия отдельного скрипта, выполняющегося через cron?
Вероятно, для получения окончательного подтверждения потребуется большая задержка (только возможность отправлять внешние запросы каждую минуту), но позволит действию пользовательского интерфейса просто хранить информацию в очереди и продолжить, а затем запланированное задание может обрабатывать ее позже ,
Процессор очереди мог бы проверить действительный ответ от внешней службы и повторить попытку, если это необходимо, без поддержки пользовательского интерфейса.
Для более своевременной обработки вы можете создать демона, который проверяет очередь на записи для обработки с меньшей задержкой, чем это возможно при использовании cron. PEAR имеет пакет System_Daemon, который может помочь в создании демона в PHP.