Синхронизированные события сервера с ruby on rails


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

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

4 2

4 ответа:

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

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

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

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

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

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