如果在线检查期间发生电源故障,我们如何更新用户再次登录门户时剩余的时间?

Neh*_*ary 5 javascript java session session-timeout java-ee

我正在进行一个项目在线考试只是为了获得知识.可能存在电源故障的情况,并且当候选人再次登录时,必须给出在电源故障期间浪费的时间.但是在我的javascript代码中,考试在与服务器时间相对应的2小时后结束(AJAX此处使用).时间结束后,学生将被重定向到主页.我想到了一个解决方案,但我没有找到实现它的开始.

由于会话保持不变,所以我可以保持2小时的使用时间并可以存储database.当他重新登录时,可以检查对应于他的特定行并且可以更新时间.

但我无法实现它.请告诉我是否有其他解决方案或我认为的方向是对还是错.

考试时钟从2小时开始恢复.当电力故障出现时,它不会从正在滴答作响的时间恢复.在这种情况下,无论是发生电源故障还是候选人再次重新登录,都是一样的.我不是要求任何代码来解决这个问题.我只想要一个我能想到的暗示或方向.我只是想知道它背后的概念是什么.

Joh*_*ter 4

稍微形式化问题:

  • 用户登录并在t0开始考试。他们的考试在t120结束。
  • 在考试结束 ( tx ) 之前的某个时刻(考试开始 x 分钟),发生电源故障,被测试者必须恢复考试。
  • 在tx 、 ty之后的某个时刻,系统恢复在线状态。
  • 在 ty 之后或等于ty 的某个时刻,用户再次登录,将其称为tz。正如您所指出的,这等于ty
  • 他们有权多花 120分钟来完成考试。考试结束的点现在是tz + (120 - x)

可能的解决方案:

最初想到了一种非常面向会话的方法,但这可能是正确的方法:

  • 实现一个周期为p 的系统范围时钟(想想“心跳”) 。对于系统启动的每个时间间隔 p,递增全局计数器。
  • 将 t0 记录为每次检查的全局计数器。
  • 在另一行中,更新检查所用的时间。这是 t0 的当前值。在您的代码中,您可能具有保存正在进行的工作并更新已用时间的功能。还要更新每个页面/部分加载的经过时间。请注意,如果在上次经过的时间更新/正在进行的保存之间丢失了一些工作,他们将“恢复”该时间,因为上次经过的更新从未被存储。
  • 区间 p 将是一个政策决定。理论上,根据失败的时间,某人可以获得额外的 p 来完成考试。如果 p 是 1 秒,那没什么大不了的。如果是5分钟,那就更重要了。当然,不同的 p 值会带来性能折衷。另外,由于我们在这里处理的不是实时系统,因此 p 可能会存在一些偏差。
  • 一切都使用交易。当系统恢复时(并且在全局时钟再次开始滴答之前),任何中断的事务都需要回滚。