0

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

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

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

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

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

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

4

2 回答 2

0

您可以使用简单的长轮询

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

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

于 2013-04-02T23:18:06.583 回答
0

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

你有几个选择:

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

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

于 2013-04-02T23:26:13.237 回答