【问题标题】:coundown server-side implementation倒计时服务器端实现
【发布时间】:2012-07-10 12:57:07
【问题描述】:

在客户端,我们有典型格式的 JS 计数器:

还剩xx天xx小时xx分钟xx秒

而且它一直在计数。每当计数器达到零时,我想自动关闭事件的注册。

我不明白的是如何在服务器端和客户端同步时间,这样 cron 作业将以至少分钟的时区精度进行。我需要吗?除了数据库中的“日期”“时间”“语言环境”之外,我还需要什么?

上下文是 Java + Spring + Postgresql 上的 Web 应用程序

我不需要整个解决方案 - 关于从哪里开始挖掘的很好的提示(或链接)。

【问题讨论】:

  • 同步时间是什么意思?例如,您是否已经在客户端 服务器上倒计时,并且它们基于时区计数不同步?
  • 在服务器端,您不应该保留一个计数器,甚至是一个 cron 作业。只需检查您获得注册的时间,如果为时已晚,则回复错误消息,否则继续。
  • 我赞同 Thor84no 的建议
  • 雷神,请将其作为答案,以便我接受。虽然这听起来很明显,但我们倾向于把事情复杂化。

标签: java javascript spring counter


【解决方案1】:

一些想法:

  • 将页面设置为自动刷新

  • 定期发送 AJAX 请求以重新同步。

然而……

  • 实际上,客户端和服务器端的时钟会在几个小时内出现明显漂移,这会令人惊讶。一台像样的 PC 一天的漂移时间不会超过几秒钟。

  • 通过 Internet 准确同步时钟不是一个简单的问题,而且可能不是您打算使用基于 HTTP 的服务来解决的问题。

将这两者结合起来,我认为重新同步计时器可能不值得尝试。

【讨论】:

    【解决方案2】:

    如果您需要让服务器知道客户端的倒计时何时结束,您只需在倒计时完成时发送 AJAX 请求即可。

    【讨论】:

      【解决方案3】:

      如果定时器超时就拒绝发送来自客户端的信息

      //have customer enter entry information
      
      if (endtime > system.currentTimeMillis())
      {
          // accept entry
          Outputstream.Write(Entry)
      {
      
      else
      {
          "Sorry Registration Closed"
      }
      

      另一种方法是在服务器端倒计时,如果为时已晚拒绝进入。

      Entry = Inputstream();
      if (system.currentTimeMillis() < endtime)
      {
          myEntries[x] = Entry;
          response = "Entry accepted!"
      }
      else
      {
          response = "Entry denied: Registration closed"
      }
      
      Outputstream.write(response);
      

      【讨论】:

        猜你喜欢
        • 2017-05-29
        • 1970-01-01
        • 2012-02-13
        • 2012-05-10
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        相关资源
        最近更新 更多