基于浏览器的MMO最佳实践

时间:2010-07-20 21:50:24

标签: python django cron

我正在开发基于谷歌地图和Django后端的在线浏览器游戏,我正在接近我需要决定如何实施(后端)定时事件的点 - 即NPC拥有数量提高(例如,城市人口应根据一些变量 - 城市规模,申请速度)增长。

我找到的可能解决方案是:

  • 将排队的操作放在表中,并将其与每个请求一起处理。
    • 问题:开销巨大,难以实施
  • 使用cron或类似的东西
    • 问题:这是一个外部工具,我想尽可能少的外部工具。

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:5)

运行计划任务以在任何时间间隔执行游戏中的更新将使您在数据库中使用大量数据。如果您的游戏逻辑依赖于所有这些数据库值同时是最新的(这很可能,如果您正在运行基于时间间隔的更新),那么您必须有计划的停机时间。 cronjob正在运行。当那个时间变长,随着你的玩家群体的增长,这变得非常烦人。

如果您正在尝试减少数据库开销,则应存储具有上次更新时间和增长率的值,并仅在增长的数量或速率发生变化时更新这些行。

例如,藏有黄金,每分钟增加5金币,只有当玩家从中取出黄金时才会更新。当您需要知道当前金额时,它将根据上次更新时间,当前时间,上次更新时存储的金额以及增长率计算。

随着时间的推移而不需要交互的数据不属于数据库。它属于游戏的逻辑端。当玩家执行您需要记住的活动时,或者计算变得太麻烦而无法再次生成时,就会存储它。

答案 1 :(得分:2)

如果我理解你的问题是正确的,你应该看看Celery是一个分布式任务队列。 http://ask.github.com/celery/