基于浏览器的MMO最佳实践
我正在开发一个基于谷歌地图的在线浏览器游戏,后端使用Django框架。现在我快到需要决定如何实现一些定时事件的阶段了,比如说NPC(非玩家角色)数量的增加(例如,城市人口应该根据一些变量来增长——比如城市的大小和应用的速度)。
我找到的可能解决方案有:
- 把待处理的动作放在一个表格里,然后在每次请求时一起处理它们。
- 问题:这样会增加很多额外的负担,而且实现起来更复杂。
- 使用cron或类似的工具。
- 问题:这是一个外部工具,我希望尽量少用外部工具。
还有其他解决方案吗?
2 个回答
2
如果我理解你的问题没错的话,你应该看看Celery,它是一个分布式任务队列。http://ask.github.com/celery/
5
如果你在游戏中设置一个定时任务来进行更新,这样会导致数据库使用量突然增加。如果你的游戏逻辑需要这些数据库中的值同时是最新的(这很可能,因为你是按照时间间隔来更新的),那么在这个定时任务运行的时候,你就得让游戏停机。随着玩家数量的增加,这个停机时间会变得越来越长,真的会让人很烦。
如果你想减少数据库的负担,可以存储一些值,包括它们上次更新的时间和增长速度,只有在数量或增长速度发生变化时才更新这些数据。
举个例子,比如说你有一堆金币,它的增长速度是每分钟增加5个金币,这个金币的数量只在玩家取出金币的时候更新。当你需要知道当前有多少金币时,可以根据上次更新的时间、现在的时间、上次更新时存储的数量和增长速度来计算。
那些随着时间变化但不需要玩家互动的数据,不应该放在数据库里,而是应该放在游戏的逻辑部分。当玩家进行某个需要记住的活动,或者某个计算变得太复杂无法再次生成时,这时候再把数据存储起来。