0

我正在使用 MVC 4 (C#) 构建在线考试应用程序,但在执行考试时间限制(持续时间)时遇到问题。最简单的方法是让服务器存储开始时间(在服务器 UTC 时间中),并让客户端使用从 UTC 转换的时间戳计算结束日期。问题是,这种方法没有考虑日历问题,例如时区、服务器/客户端之间的时钟不同步、闰年和所有爵士乐。

示例:用户以 60 分钟的时间限制开始考试。服务器应该知道开始时间(在控制器操作中)并在考试持续时间结束时进行服务器端验证。同时,客户端应显示倒计时(javascript?),并在达到限制时终止考试。

我按照这个例子,但它只将服务器时间转换为客户端时区。如果客户端的时钟不同步,我们就有问题了。将其转换为我的考试环境意味着考试的持续时间不会精确到 60 分钟,甚至可能相差 +/- 小时。

关于最好的方法可能是什么的任何想法?非常感谢代码示例。

顺便说一句,我对 MVC/javascript 很陌生。

4

1 回答 1

2

我不同意你的分析。

我知道物理学和相对论以及同步时钟的问题,但我认为你的问题很简单。

服务器只需要知道它的时间。如果用户有 X 小时来完成一项任务,那么服务器所需要知道的就是客户端使用第一个手势启动操作时的本地时间。从那毫秒开始 X 小时,考试就结束了。

EndTime(Server) = StartTime(Server) + Delta

求解 Delta:

Delta = EndTime(Server) - StartTime(Server)

另一个时区的用户可能会说考试开始时他们的时钟读数不同,但他们体验到的增量是相同的。

让我们从客户的角度编写相同的方程式:

StartTime(Client) = StartTime(Server) + TimeZoneDelta
EndTime(Client) = EndTime(Server) + TimeZoneDelta

将这些代入 Delta 的另一个方程:

Delta = EndTime(Client) - TimeZoneDelta - StartTime(Client) + TimeZoneDelta
Delta = EndTime(Client) - StartTime(Client)

在本地时区显示日期和时间是另一回事。你的文章正在讨论一个不同的问题。

我可以看到您的客户端每分钟对服务器进行重复的 AJAX 调用,以了解测试还剩多少时间并更新进度条。客户端会欣赏视觉反馈,无论客户端和服务器之间的分离如何,服务器都会始终发送正确的答案。

于 2013-10-23T12:01:18.587 回答