2009-12-25 64 views
2

我正在尝试在Ruby on Rails中创建一个基于Web的游戏。我有一个名为'Game'的模型,它在数据库条目中有一个日期时间,对应于我希望服务器调用Game模型的update_game函数的时间。根据游戏的设置,这可能是每隔30秒到每12小时。用轨道上的红宝石定时服务器事件

Ruby on Rails只在收到HTTP请求时才起作用;有没有一种可以让我的游戏定期更新而不受HTTP请求影响的方法?

回答

2

我想看看delayed_job。游戏开始时,您可以为第一次更新创建一个delayed_job,之后的每次运行都可以按正确的时间间隔添加一个新作业,直到完成为止。

虽然我会做很多测试;) - 你不想让工作离你而去。

1

研究后台处理选项和可能的cron。

2

Rails本身并不这样做; cron做到这一点。但是,Ruby确实有a gem named Whenever以使新cron作业的声明和部署更容易。然而,如果你真的希望大量的游戏每30秒可靠更新一次,那么如果更新游戏需要花费大量的时间,你可能需要采取不同的方法。也许一旦游戏被访问,游戏可以根据需要多次运行更新(例如,如果3分钟已经过去并且时间间隔是30秒,则一旦请求运行6次更新)。但是,这可能会也可能不是您的设置的一个好选择,因此找出哪种方法更适合您的目的。

+0

无论何时访问游戏,更新的难度在于游戏将更新子对象和孙子对象。我将不得不在游戏的每个后代中都放置类似的代码,并且如果我添加孙子,似乎会很容易引入错误,但忘记放入before_filter以便在游戏被访问时更新游戏。 – Ryan 2009-12-25 02:45:17

+0

所以它不止一个控制器?那么我认为克朗肯定是更好的解决方案。每当是一个很好的工具:) – Matchu 2009-12-25 02:57:56

+1

如果你担心忘记“before_filter”,那么为什么你不创建一个从ActionController继承的类,以及它需要的所有设置和方法,然后让所有的控制器继承从那个? – Trevoke 2010-01-19 14:23:51

0

我喜欢在Rails中工作的gem'rufus-scheduler',不过我不确定你可以通过编程向其添加更多任务。