Вопрос

Я пытаюсь создать веб-игру на Ruby on Rails.У меня есть модель с именем «Игра», в записи базы данных которой есть дата и время, соответствующие времени, когда я хотел бы, чтобы сервер вызывал функцию update_game модели игры.В зависимости от настроек игры это может происходить каждые 30 секунд или каждые 12 часов.

Кажется, что Ruby on Rails работает только тогда, когда он получает HTTP-запрос;Есть ли удобный способ заставить мою игру периодически обновляться независимо от HTTP-запросов?

Это было полезно?

Решение

я бы посмотрел задержанная_задание для этого.Когда игра запускается, вы можете создать Delayed_job для первого обновления, и каждый последующий запуск может добавлять новое задание через правильный интервал, пока оно не будет выполнено.

Хотя я бы провел много тестов;) - вы не хотите, чтобы работа ускользнула от вас.

Другие советы

Сам Rails этого не делает;cron делает это.Однако у Руби есть драгоценный камень по имени Всякий раз чтобы упростить объявление и развертывание новых заданий cron.

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

Изучите параметры фоновой обработки и, возможно, cron.

Мне нравится гем «rufus-scheduler», который работает в Rails, хотя я не уверен, что к нему можно программно добавить больше задач.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top