基于浏览器的MMO最佳实践

3 投票
2 回答
811 浏览
提问于 2025-04-16 01:35

我正在开发一个基于谷歌地图的在线浏览器游戏,后端使用Django框架。现在我快到需要决定如何实现一些定时事件的阶段了,比如说NPC(非玩家角色)数量的增加(例如,城市人口应该根据一些变量来增长——比如城市的大小和应用的速度)。

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

  • 把待处理的动作放在一个表格里,然后在每次请求时一起处理它们。
    • 问题:这样会增加很多额外的负担,而且实现起来更复杂。
  • 使用cron或类似的工具。
    • 问题:这是一个外部工具,我希望尽量少用外部工具。

还有其他解决方案吗?

2 个回答

2

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

5

如果你在游戏中设置一个定时任务来进行更新,这样会导致数据库使用量突然增加。如果你的游戏逻辑需要这些数据库中的值同时是最新的(这很可能,因为你是按照时间间隔来更新的),那么在这个定时任务运行的时候,你就得让游戏停机。随着玩家数量的增加,这个停机时间会变得越来越长,真的会让人很烦。

如果你想减少数据库的负担,可以存储一些值,包括它们上次更新的时间和增长速度,只有在数量或增长速度发生变化时才更新这些数据。

举个例子,比如说你有一堆金币,它的增长速度是每分钟增加5个金币,这个金币的数量只在玩家取出金币的时候更新。当你需要知道当前有多少金币时,可以根据上次更新的时间、现在的时间、上次更新时存储的数量和增长速度来计算。

那些随着时间变化但不需要玩家互动的数据,不应该放在数据库里,而是应该放在游戏的逻辑部分。当玩家进行某个需要记住的活动,或者某个计算变得太复杂无法再次生成时,这时候再把数据存储起来。

撰写回答