【问题标题】:Asp.net mvc server side timerAsp.net mvc 服务器端定时器
【发布时间】:2016-01-29 05:53:16
【问题描述】:

我正在创建一个在线测验应用程序并且需要服务器端计时器。例如,如果用户打开另一个浏览器或刷新页面或离开和返回时间应该是正确的。

现在我正在使用 jquery 计时器,并且每 5 分钟发送一次 ajax 请求以将适当的信息存储到数据库中。此外,当用户回答问题时,我会立即再次发送 ajax 请求以实现相同目的。

我应该改用信号器吗?在asp.net mvc中处理服务器端计时器更合适的方法是什么?

【问题讨论】:

    标签: c# ajax asp.net-mvc signalr


    【解决方案1】:

    只要您有会话,您就可以简单地存储用户在会话状态下开始参加测验的时间戳。

    您可以通过查看该事件的时间戳减去用户参与调查的时间戳来判断任何未来事件的时间。

    示例(服务器端代码):

    if (Session["startTime"] == null)
    {
        Session["startTime"] = DateTime.Now;
    }
    
    var ticksRemaining = DateTime.Now - Session["startTime"];
    // Use ticksRemaining to populate the start value for the count-down timer
    // Works just fine even if they reload the page or open a new browser tab.
    // You won't catch if they open a brand-new browser and start a new session,
    // but that's a different kind of problem.
    

    【讨论】:

    • 在客户端应该有倒数计时器,如果他刷新或打开它到另一个浏览器客户端时间将不正确
    • 在页面加载时,将剩余时间作为 HTTP 响应的一部分发送。如果您使用的是例如JavaScript 计时器,使用存储在 session 中的变量填充倒计时的时间。添加了一些示例代码。
    • 在客户端我应该每秒更新一次会话的stardate。不错的解决方案,但另一个浏览器或用户离开页面然后返回问题仍然存在
    • 我认为 signalr 是解决方案
    • 如果用户使用其他浏览器,没有切实可行的解决方案。如果他清除 cookie 或使用隐私模式浏览,则没有切实可行的解决方案。如果他离开页面然后回来,没有清除 cookie,他仍然有会话,一切都会好起来的。如果人们必须登录才能参加考试,您也可以将开始日期存储在数据库中,如果 Session["startTime"] 为空,请在将其分配给当前时间之前检查数据库中的值。
    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 2017-06-27
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多