代码之家  ›  专栏  ›  技术社区  ›  Sijmen Mulder

让Rails在特定时间发生某些事情

  •  1
  • Sijmen Mulder  · 技术社区  · 17 年前

    我曾想象过有一个类似deamon的东西,但那该怎么办呢?在我看来,旋转+投票似乎不是正确的做法。我看着 async_observer

    4 回复  |  直到 17 年前
        1
  •  1
  •   Mike Woodhouse    17 年前

    如果你只需要事件对拥有它的玩家可见,那么模型可以按需报告其更新状态,我们就完成了,继续前进,这里什么也看不到。

    另一方面,如果它需要在计划创建时对任何人可见,那么这个问题就更有趣了。

    我会说你需要两样东西。一个队列,您可以将定时事件放入其中(数据库表会很好),一个后台进程,可以连续运行或频繁重启,它提取自上次执行以来计划发生的事件(或者我想是即将发生的事件)并对其进行操作。

    看着 list of options 在Rails wiki上,似乎还没有一个真正的解决方案。让我们希望其中一个符合要求。

        2
  •  1
  •   John Munsch    17 年前

    我刚刚为我正在开发的PBBG做了这件事(大反派,你可以在MadGamesLab.com上看到正在进行的工作)。不管怎样,我使用了一个命令表,其中每个用户命令只生成一个条目,以及一个事件表,每个命令有一个或多个条目(链接回命令)。使用脚本/运行器启动的辅助守护进程会定期轮询事件表,并运行已过时间的事件。

    到目前为止,它似乎运行得很好,除非我在吸引大量用户时看到一些问题,否则我不打算改变它。

        3
  •  0
  •   Jeremy French    17 年前

    在某种程度上,这取决于你的前端有多少逻辑,以及你的模型有多少逻辑。如果你知道事情发生前会经过多长时间,你就可以把大部分逻辑放在前端。

    我会使用你的模型来确定事物的状态,根据具体要求,你可以检查它是否已经构建。我不明白为什么你需要一个背景工作者来做这件事。

        4
  •  0
  •   Bill    17 年前

    我会使用AJAX来启动计时器(参见 Periodical Executor )用于更新您的UI。在模型方面,只需跟踪建筑物的created_at列,只有在其构建时间已经过去的情况下才允许使用它。这样,您就不必每隔几秒钟就去数据库查看您的建筑是否完工。