php делегирование интенсивных задач

Я пытаюсь создать функцию рассылки для своего приложения, где пользователь может отправлять электронные письма каждому подписчику. Проблема в том, что это может занять довольно много времени в зависимости от количества подписчиков. Я хотел бы иметь его, где пользователь напишет сообщение и отправит его на сервер. Затем сервер будет «делегировать» задачу, выполняемую за пределами HTTP-запроса. Таким образом, идентификатор транзакции может быть отправлен клиенту, который, в свою очередь, может периодически «опросить» сервер, чтобы проверить ход транзакции электронной почты. Какими способами (или способом) я могу это достичь?

Вы описываете очередь сообщений («Message» и «Job» могут быть взаимозаменяемы в этом контексте). Он работает, посылая сообщение в очередь, содержащую информацию о выполняемом задании. Рабочие постоянно проверяют очередь на новые сообщения. После обнаружения рабочий берет на себя ответственность за сообщение, удаляет его из очереди и выполняет все, что он запрограммировал.

Раньше я использовал Gearman . У них есть несколько хороших примеров, которые демонстрируют основы очередей сообщений.

  • Простой обратный пример
  • Основные задачи

Существует два типа рабочих мест: «Передний план» и «Фон».

Работа на переднем плане

Передние задания блокируются тем, что ваш PHP-код будет ждать завершения задания до продолжения. Это предназначено для разгрузки аппаратно-интенсивной обработки рабочему (наиболее вероятно, выполняется на другом сервере, чем веб-сайт).

Справочные задания

Фоновые задания не блокируются. Это задания, которые отправляются в очередь и предполагается, что они будут обработаны позднее. Хорошим примером этого может быть отчет, созданный запросом, который занимает несколько минут для запуска и отправки по электронной почте (или иным образом отправленного) пользователю при его готовности.