2013-04-02 41 views
0

我使用PHP编写服务器端的网页,并使用javascript来构建客户端。php/javascript - 使用ajax自动更新客户端

网站上有一个div用于显示从服务器端收到的数据,例如,假设显示数据库中注册用户的当前数量。该号码将在未知的时间段中保持变化。例如,这个数字在10个小时内可能是相同的,并且可能在10分钟内增加1000个。

我的第一个问题是,什么是做这个功能的最好方法,以便网站可以随时显示这个数据的最新或近乎最新值?

我最初的方法是使用Javascript AJAX,并通过setInterval(1000)(-1秒)来发送Ajax请求到服务器端。但是我不确定这对于客户端来说是否太重(因为JavaScript是单线程的,如果在每个1秒内运行的功能可能会很慢),甚至服务器端(例如,如果数百个用户打开此网站并将数百个请求发送到服务器端)。那这个好吗?

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

提供的任何代码或例子将非常感激。

+0

在现代浏览器中,你可以使用[网络工作者(https://developer.mozilla.org/ EN-US /文档/ DOM/Using_web_workers)。 – elclanrs

+1

关于你的第一个问题:每秒发送一次AJAX调用可能不会对客户端造成太大的压力,但是对于服务器来说,这肯定会成为一个问题。想想每秒钟有1000个客户端能够ping你......这对你的服务器来说是一个很大的压力。 – Steve

回答

0

你当然可以使用AJAX进行随时间推移的更新,但如果你想每隔一秒左右连接到服务器,我会反对它。

你有几个选择这里:

  • 正如@Kay已经提到,long polling可能是一种选择。

  • 或者,你可能想看看WebSockets或支持WebSockets的框架,像Meteor

0

您可以使用简单的long polling

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

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