5

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

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

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

考试时钟从 2 小时开始恢复。它不会从停电时的滴答声开始恢复。至少在这种情况下,无论是发生电源故障还是候选人再次登录,都是一样的。而且我不要求任何代码来解决这个问题。我只是想要一个我能想到的提示或方向。我只想知道它背后的概念是什么。

4

2 回答 2

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 可能存在一些偏差。
  • 使用事务处理一切。当系统恢复时(并且在全局时钟再次开始计时之前),任何被中断的事务都需要回滚。
于 2012-08-06T03:02:52.310 回答
0

您可以使用 Websockets 来实现客户端服务器通信。Websockets 提供了自己的 healthchek。它具有 onOpen() 和 onClose() 等方法,可在打开或关闭连接时接收事件。

于 2014-03-27T07:07:50.120 回答