【问题标题】:php/javascript - using ajax to automatically update the client sidephp/javascript - 使用 ajax 自动更新客户端
【发布时间】:2013-04-02 23:12:37
【问题描述】:

我使用PHP编写网页的服务器端,并使用javascript构建客户端。

网站上有一个 div 会显示从服务器端接收到的数据,例如,假设显示数据库中当前注册用户的数量。此数字将在未知的时间段内不断变化。例如,数字可能在 10 小时内保持不变,而在 10 分钟内增加 1000。

我的第一个问题是,执行此功能的最佳方法是什么,以便网站始终显示此数据的最新或几乎最新值?

我最初的方法是使用 Javascript AJAX 并由 setInterval(1000)(-1 秒)包装,以将 Ajax 请求发送到服务器端。但是我不确定这对于客户端(因为javascript是单线程的,如果每1秒内运行一个函数可能会很慢)甚至服务器端(例如,如果数百个用户打开这个网站)并将数百个请求发送到服务器端)。那么这样可以吗?

我的第二个问题是,如果这不是一个好方法,我还能做些什么来实现相同的目标。我正在考虑使用另一种方式。例如,如果服务器端有更新,那么在服务器端使用 PHP 将更新推送到客户端,甚至使用 PHP 脚本直接更改 HTML 中显示的数据。这可能吗?如果是,这是一个好方法吗?

提供的任何代码或示例将不胜感激。

【问题讨论】:

  • 在现代浏览器中,您可以使用Web Workers
  • 关于您的第一个问题:每秒发送一次 AJAX 调用可能不会对客户端造成很大压力,但肯定会很快成为服务器的问题。想想每秒有 1000 个客户端 ping 你……这对你的服务器来说是一个很大的压力。

标签: php javascript ajax web-services jquery


【解决方案1】:

您当然可以将 AJAX 用于随时间分布的更新,但如果您想每隔一秒左右连接到您的服务器,我建议您不要这样做。

你有几个选择:

  • 正如@Kay 已经提到的,long polling 可能是一个选项。

  • 或者,您可能想研究WebSockets 或支持WebSockets 的框架,例如Meteor

【讨论】:

    【解决方案2】:

    你可以使用简单的long polling

    客户端请求脚本"/counter?oldvalue=...&timestamp=...。如果未更改,服务器不会立即返回值,而是最多闲置 30 秒。

    如果计数器值发生变化,则立即返回更新后的值。

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多