Временные серверные события с ruby ​​на рельсах - PullRequest
2 голосов
/ 25 декабря 2009

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

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

Ответы [ 4 ]

2 голосов
/ 12 февраля 2010

Я бы посмотрел на delayed_job для этого. Когда игра запускается, вы можете создать delayed_job для первого обновления, и каждый запуск после этого может добавлять новое задание с правильным интервалом, пока это не будет сделано.

Я бы сделал много тестов;) - ты не хочешь, чтобы работа уходила от тебя.

2 голосов
/ 25 декабря 2009

Rails сам не делает этого; Cron делает это. Однако в Ruby есть гем с именем Whenever , чтобы упростить объявление и развертывание новых заданий cron.

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

1 голос
/ 25 декабря 2009

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

0 голосов
/ 19 января 2010

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

...