javascript - 基于时间的事件数据库(方法)

标签 javascript php mysql database

我有一个一般性问题,与某些代码无关。所以我只是要求一个通用的方法。

在我的游戏中,我有一些基于时间的事件,例如在常见应用程序中,例如部落冲突。用户可以选择提高 Angular 色的技能。假设 Angular 色“John”的攻击等级为 1。要达到下一个等级 2,需要 1 天的训练时间。

现在我的问题是,我怎样才能做到这一点。我不想用简单的倒计时来处理这个客户端,因为他可以操纵计时器的风险太高了。我想将它存储在某个在线位置,客户端正在向服务器请求剩余时间。

最好的方法是什么?

  • 我知道 MySQL 中有基于时间的事件,因此我可以简单地每 5 秒运行一次任务,但我认为这不是最好的方法。

编辑:

我遇到的问题是,如果约翰开始他的训练,客户端必须有一个倒计时。但是这个倒计时应该不会收到客户端的剩余时间。应用程序应该从服务器获取时间。

事实上这并不是很困难,因为我只需要向服务器发出请求以获取事件触发的时间并使用 now() 计算剩余时间。

但我也想建立一个实时数据库。例如,用户“Marc”可以访问 John 的个人资料。如果时间已经过去,John 的个人资料中应该有 2 级。但是,如果 John 没有登录,则不会向服务器发出请求,因此它不会更新级别。

因此,主要问题是,一方面,如果用户通过简单地发出发布请求并更新经过的培训来登录,我可以更新数据库记录。但是,如果 John 没有登录,而 Marc 想在他的个人资料中查看他的等级,那么就没有发帖请求,它显示的是等级 1 而不是等级 2。

最佳答案

假设您指的是日历时间,则有多种方式。最重要的组件是存储状态更改发生的时间。不要将其存储为“1 天”,将其存储为特定的日期和时间。

然后,您基本上有三个选择。

首先是将时间构建到应用程序的逻辑中。将 2 级时间设置为 1 级时间加 1 天。然后使用 now() 确定级别。这样做的缺点是逻辑会变得复杂。但是对于像您的问题这样的简单示例,它可能是正确的选择。

第二种方法是为每个状态更改生成一个事件,并在适当的时间安排它。当事情进展缓慢时,这会起作用,但扩展性非常差。必须处理管理事件和其他性能查询是一项挑战。

第三种方法是计划作业,比如说每小时运行一次。这可以一次性完成所有必要的状态更改。

关于javascript - 基于时间的事件数据库(方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39065132/

相关文章:

javascript - 这个弹出窗口是如何出现并在一段时间后消失的

javascript - 使用 javascript 从 html 列表中过滤元素

php - 使用带有正则表达式的 mysql regex_replace

javascript - 与 Laravel 分页一起使用的表格搜索

c++ - soci按行打印出表格中的所有数据

mysql - 如何使用大型数据集(数百万行)的连接和子查询优化 MySQL 查询

javascript - 如果语句无法访问 body 元素,则设置路径点

javascript 搜索 json 对象

php - 验证码在 localhost 上工作正常,但不能在线工作

php - 在 Moodle 3.5 中添加新用户时出错