代码之家  ›  专栏  ›  技术社区  ›  Gabi Purcaru BornCoder

基于浏览器的MMO最佳实践

  •  3
  • Gabi Purcaru BornCoder  · 技术社区  · 15 年前

    我正在开发一款基于谷歌地图的在线浏览器游戏,带有Django后端,我正接近需要就如何实施(后端)定时事件做出决定的点,即NPC持有量增加(例如,城市人口应根据一些变量增长-城市规模、应用程序速度)。

    我发现的可能的解决方案是:

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

    还有其他的解决办法吗?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Frank Crook    15 年前

    运行一个计划任务来执行游戏中的更新,在任何时间间隔内,都会给你大量的数据库使用。如果您的游戏逻辑依赖于所有这些数据库值同时更新(很可能,如果您正在运行基于间隔的更新),那么只要cronjob运行,您就必须安排停机时间。当时间变长时,随着玩家基数的增加,这会变得非常烦人。

    如果您试图减少数据库开销,那么应该使用值的上次更新时间和增长率存储值,并且只在增长量或增长率发生变化时更新这些行。

    例如,一个每分钟5金的金库,只有玩家从中提取黄金时才会更新。当您需要知道当前金额时,将根据上次更新时间、当前时间、上次更新时存储的金额以及增长率进行计算。

    随时间变化而不需要交互的数据不属于数据库。它属于你游戏的逻辑端。当一个玩家执行一个你需要记住的活动,或者计算变得过于繁琐而无法再次生成时,那就是你存储它的时候。

        2
  •  2
  •   Mike    15 年前

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