定时测验:如何考虑互联网中断?

时间:2011-05-13 17:36:24

标签: python django session timer

我正准备在Django进行测试或测验。测验需要在特定时间范围内完成。说40分钟30分钟。我总是可以在测试开始时启动一个时钟,然后在测验完成时计算时间。但是,在尝试期间,可能会出现诸如互联网连接中断或系统崩溃/断电等问题。

我需要一个策略来确定何时发生这样的事故,并停止时钟,然后让用户再次从停止的地方进行测试,然后再次启动时钟。

什么是正确的策略?任何帮助,包括示例代码/示例/想法都是最受欢迎的

4 个答案:

答案 0 :(得分:2)

最简单的方法是在人员开始测验时添加时间戳,然后将其与他们提交的时间进行比较。当然,这并没有考虑连接丢失,崩溃等等......就像你提到的那样。

为了解决这些问题,我可能会使用像node.js这样的东西。每个客户端在连接到测验时都会“登记”。然后定期(每1s,10s,1m等等)客户端检入。如果在这些时间间隔客户端没有办理登机手续,你可以假设他们已经连接掉线了。您可以跟踪他们何时再次连接,并从他们离开的地方开始计时器。

这是我最初关于如何跟踪连接丢失和崩溃的想法。使用对Django视图的前端ajax调用也可以这样做。

答案 1 :(得分:2)

要么你在客户端做时钟,在这种情况下他们总是以某种方式作弊,或者你在服务器端做,然后你没有考虑到这些中断。

为了减少作弊并且仍允许中断,你可以做“保持活力”。

这里客户端代码向服务器宣布它每隔一段时间仍然存在,比如说每5秒一次。服务器端注意到它何时停止获取这些消息,并暂停/停止时钟。但是它仍然有开始和结束时间,所以你知道真正花费了多长时间,以及在客户端应该在那里花了多长时间。

通过这两条信息,您可以非常轻松地追踪奇怪的行为并将人们列入黑名单。列入黑名单的人可能不知道他们被列入黑名单,但他们的测验分数并没有出现在你的测验系统的其他用户身上。

答案 2 :(得分:2)

您的策略应该取决于测试的重要性和重新进行整个测试的能力。

  1. 是否有趣或能力/知识检查的测试/测验?
  2. 您是否在与已登录的用户打交道?
  3. 是否从可用问题的大型民意调查中随机生成测试?
  4. 这些是您首先需要回答的问题。

    请记住:

    • 恶意用户CAN模拟连接中断/电源故障,
    • 只有服务器端才能信任的时钟,
    • 浏览器端的一切都可以被操纵(想想firebug / console js注入)

    我的方法是:

    1. 告知用户TIME是重要因素,并且在给出成绩时可能不会考虑连接问题......,
    2. 仅提供一个问题,等待回答,再提供一个问题,
    3. 整个测试时间应按每个答案时间的 SUM 计算:
      • 保存每个“问题发送”/“收到的答案”时间戳,并从中计算答案时间,
      • 问题之间的时间不计算在内,
      • 你会得到额外的范围,让问题更难/更长时间回答。
    4. 在您的问题页面中添加某种心跳(每隔X秒就像ajax请求一样),当心跳停止时(取决于您拥有的选项):
      1. 使问题无效并通过对话框通知用户他有连接问题,如果您对要使用的问题进行较大的调查,则必须刷新以获取新问题
      2. 在服务器端暂停时间(例如昏暗的问题页面,以便用户在恢复连接之前无法应答)仅适用于游戏/趣味测验/测试的IMO
      3. 在每次中断时在服务器端保存信息,这将稍后简化决定以允许重新进行整个测试。他很好,直到第20个问题,然后他连续3-4个简单问题......

答案 3 :(得分:0)

当与用户的连接断开时暂停时钟的问题是,用户每次收到新问题时都可以断开他们的计算机与互联网的连接,然后在他们得出答案后重新连接。

您可以做的一件事是为用户提供一定的时间来处理每个问题。

当用户成功地将问题提交给他们的浏览器时,时钟启动,如果用户在时间限制之前提交了答案,则会被接受,否则无效。

这意味着如果用户失去连接,它只会影响他们当前的问题。但这也意味着用户无法灵活分配他们想要分配给每个问题的时间,您可以自行决定。

我原以为你可以做一些事情,比如从屏幕上删除问题,除非与服务器的连接仍然存在,但用户总是可以在断开连接之前屏幕拍摄问题。