跟踪玩家技能升级的最有效方式

问题描述 投票:0回答:1

到目前为止,我已经研究了两种持续跟踪游戏中玩家属性技能的方法。这些主要是概念性的,除了我想出的线程选项/找到了一个例子。

案子:

Solo开发网页游戏。地理政治模拟器,但与其他人相比有点扭曲,我不会透露。

我正在使用Flask和SQLAlchemy的组合为其编写路由,并将模板动态扩展到基础。

目前在本地以开发模式运行它,目的是在基于云的Linux vm上将其置于WSGI和反向代理(如Nginx)之后。

关于玩家属性机制 - 玩家将提交一个帖子请求,该请求将指定一些信息。首先,我们想知道哪种技能,智能,耐力等。接下来我们需要知道哪个播放器,但所有这些都将自动生成,我们可以使用Flask-LoginManager通过我们漂亮的user_loader装饰器和函数来获取当前用户。我们可以使用它提供的用户ID来查询其余部分,即播放器的级别。我们可以指定用于决定等待时间增加的数学,以秒为单位。

选项;

选项1:

正如我的同事所建议的那样。允许数据库管理技能的时间。当用户提交表单时,我们将创建一个新表来保存技能升级信息。我们记下用户提交表单的时间,并将当前技能水平乘以X时间量,然后将两个数据放入数据库。然后我们创建一个新进程来管理对该表的持续检查。使用timedelta,我们可以检查自提交表单以来经过的时间是否等于或大于玩家必须等到升级完成的时间。

选项2:

导入线程并创建一个类,该类需要与init上提供的abovr相同的信息,然后只需使用time.sleep X时间,然后触发升级并在线程结束时终止线程。

我希望这一切都有道理。我还没有写过,因为我尚未决定哪种方法最有效。

我正在寻找最具可扩展性的解决方案(即使它不是这里列出的选项),但是我的技能跟踪机制概念也是实用的或改进的。

我愿意在包中添加另一个lib,但我真的不愿意。

python python-3.x sqlite flask-sqlalchemy flask-login
1个回答
0
投票

我会稍微扩展一下我的评论:

在可扩展性方面:

  • 如果升级过程变得很长怎么办?几小时或几天?
  • 如果你有很多用户怎么办?
  • 如果人们在不同时间断开连接并重新连接会话怎么办?

希望很明显,您无法确保使用选项2的强大过程。线程和等待将在服务器上产生连续且可能有限的负载,并且如果服务器失败,则所有这些线程都可能丢失。

在稳健性方面:

另一方面,如果您将所有信息记录到数据库,则可以交叉检查任何项目的状态,并根据某种形式的任务计划程序执行升级/降级操作。这允许您确保字符状态始终与您期望的一致。并且您只需要一个进程定期扫描数据库,并对标记为升级的所有打开行执行操作。

如果您愿意,您也可以完全避免使用全局任务调度程序。当用户在站点上执行活动时,可以在后台运行一个小任务(作为一种装饰器)来检查升级状态,如果时间正确则执行DB活动,否则只是通过。但是用户需要积极参与会话以确保发生这种情况,而不是上面的计划任务。

© www.soinside.com 2019 - 2024. All rights reserved.