Запланированное выполнение PHP метода

Пишу небольшую браузерную игру с бэкендом на php symfony

У каждого игрока отведено время на ход. Требуется на стороне сервера вызвать событие если время закончилось.

Как мне запланировать задачу, которая вызовет метод (или отправит get запрос) через определенное время


Сейчас реализовано так:

  1. Создается строка в базе данных с временной меткой
  2. Запланирован скрипт который каждую секунду проверяет временные метки всех строк
  3. Вызывает нужный метод, когда временная метка < текущей

Но я так понимаю это не best practices, ищу менее костыльный вариант


Ответы (2 шт):

Автор решения: Romka

Для таких задач лучше использовать очереди. По сути вы реализовали свой механизм очередей. Но лучше использовать готовый компонент.

В вашем случае задание в очередь нужно добавить с задержкой(будет выполнено после истечения установленного времени). Для этого также есть готовый функционал.

→ Ссылка
Автор решения: Равиль Шаменов

Ввести очередь - типичное решение задачки с ожиданием. Такое решение гораздо лучше всех других (нет костыльных решений проблем, которые появятся - с падением процесса, потерей данных при перезагрузке, зависания ждущих воркеров, проверке их статусов, утечек памяти и прочим).

Вопросы с задержкой исполнения сообщений в очереди - это отдельные вопросы, не связанные с задержкой исполнения, решать их нужно теми способами, которые в этом случае применяются - приоритизация очередей, создание множества воркеров и прочими вещами.

→ Ссылка