【问题标题】:How to periodically update server-side value on webpage?如何定期更新网页上的服务器端值?
【发布时间】:2012-08-07 19:22:16
【问题描述】:

我有一个存储在 MySQL 数据库中的时间戳,我想定期(比如每秒)更新当前时间与存储在数据库中的时间戳值之间的差异(当然无需重新加载页面)以显示某些内容就像一个 5 分钟的倒数计时器。现在。我正在考虑使用 setTimeout 定期触发获取此值的 AJAX 请求。这是最好的方法吗?相反,我应该只运行一个客户端计时器,然后每分钟左右将其与服务器端时间戳同步一次吗?

注意:此计时器负责我网站上的一项重要功能,因此它应该相当准确。

编辑:我不需要 cron 作业,我只需要一个倒计时计时器,它会在网页上更新,例如从 5:00 到 4:59 到 4:58...等等,自动地。如果您熟悉 Megaupload 关闭前的那个,我需要类似的东西。

【问题讨论】:

  • every second = 坏主意。大量的网络流量,大量的数据库流量,只是为了跟踪时间?计算机已经有了一个叫做“时钟”的东西——我听说它们很受欢迎;-)
  • 我该怎么做?会是来自客户端计算机的时钟吗?我需要确保这个计时器是准确的,不会被客户端篡改。
  • 这里的用例是什么?您是要禁用某些功能或阻止用户在一段时间后提交表单,还是要执行其他操作?
  • 基本上我需要一个表单在用户单击提交按钮后恰好 5 分钟提交。我需要用户查看表单提交前还剩多少时间。理想情况下,它应该每秒更新一次,所以它看起来像一个真正的计时器,有点像 Megaupload 之前的计时器。
  • 好吧,因为 Javascript 工作方式的本质,exactly 几乎是不可能实现的(有关详细信息,请参阅this)。但是,您可以做一些非常接近它的事情,我建议您要做的是在客户端(用户可篡改但资源消耗最少)做这一切,更重要的是使用服务器端验证来防止用户能够篡改它。因此,您在开始时在数据库中设置了一个值,上面写着“在 x 时间之前不接受提交”,然后客户端可以处理计时器

标签: php javascript mysql ajax timer


【解决方案1】:

这取决于你想完成什么。

例如,如果您通常需要每 5 分钟处理一次与网站相关的内容,请使用 cron 作业。

如果您想通过更新每个示例的 cmets 列表来改善用户体验,请使用 ajax。

【讨论】:

    【解决方案2】:

    所以你想要一台能承受这么多压力的服务器。

    可以假设服务器和客户端上的时钟都有一秒,两者持续时间一样长,并且可能需要一周(如果非常糟糕)分歧。

    但是客户端可能认为现在是 1972 年 1 月 1 日午夜,但您的服务器认为是 2012 年 8 月 10 日星期五 14:25。

    所以只需将该日期从服务器传递给客户端。找出差异。在页面上,您可以仅使用 Javascript 将服务器日期/时间放在页面上。

    至于网站(服务器位)仅依赖于服务器时间。你可以控制的。

    倒计时只是一种玩笑。但是服务器是您的资产,也是您开展业务的地方。如果您依赖客户,一些讨厌的人可以重置时间。

    【讨论】:

      【解决方案3】:

      您可以编写一个执行此操作的脚本,并且可以每秒左右运行一次,具体取决于您的服务器运行的操作系统,使用:

      如果 linux { chronjob } http://www.thegeekstuff.com/2011/07/php-cron-job/

      else if windows { windows scheduler } How do I run a PHP script using windows schedule task?

      这是运行客户端脚本最安全、最有效的方式。

      【讨论】:

        【解决方案4】:

        由于 Javascript 工作方式的性质,几乎不可能实现精确的计时器(有关详细信息,请参阅此内容)。

        但是,您可以做一些非常接近它的事情,我建议您要做的是在客户端(用户可篡改但资源消耗最少)做这一切,更重要的是使用服务器端验证以防止用户篡改它。因此,您在开始时在数据库中设置了一个值,上面写着“在 x 时间之前不接受提交”,然后客户端可以处理计时器。

        Here is a very small example of how it can be done

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-22
          • 2017-09-29
          • 1970-01-01
          • 1970-01-01
          • 2020-09-05
          • 1970-01-01
          • 2022-07-21
          • 1970-01-01
          相关资源
          最近更新 更多