6

有什么方法可以将数据推送到页面而不是定期检查?

显然,您可以使用 ajax 定期检查它,但是有什么方法可以在执行 php 脚本时强制页面重新加载?

从理论上讲,您可以通过仅在应该执行 ajax 函数时使用表来提高 ajax 请求的速度(当 ajax 函数应该从数据库中检索新数据时更新表中的值),但这仍然需要大量内存和 mysql 连接以及在查询执行时仍有一些等待时间,即使没有更新/您不想执行检索数据库数据的 ajax 函数。

有什么方法可以比查询数据库和检查存储“如果更新”数据的表或告诉 ajax 函数从另一个页面执行更有效吗?

我猜 node.js 或 HTML5 webSocket 也可能是一个可行的解决方案?

或者您可以将“如果更新”数据存储在文本文件中?欢迎任何建议。

4

4 回答 4

2

您基本上是在谈论通知客户端(即浏览器)服务器端事件。这实际上归结为两件事:

  1. 您使用的是什么网络服务器?(您是否仅限于特定语言?)
  2. 您需要支持哪些浏览器?

您最好的选择是使用WebSockets来完成这项工作,除了使用 web-sockets 之外的任何事情都是一种黑客行为。尽管如此,许多“hacks”都可以正常工作,我建议您尝试CometAJAX long-polling

有一个名为Atmosphere的项目(以及更多项目)为您提供适合您正在使用的 Web 服务器的解决方案,然后会根据用户的浏览器自动选择最佳选项。

如果您不受浏览器的限制并且可以选择您的网络堆栈,那么我建议使用SocketIO + nodejs。这只是我现在的偏好,WebSockets 仍处于起步阶段,一旦它开始发展,事情就会变得有趣。有时我的整个应用程序并不适合 nodejs,所以我将把数据操作单独卸载给它。

祝你好运。

于 2012-07-09T17:20:49.567 回答
2

Another possibility, if you can store the data in a simple format in a file, you update a file with the data and use the web server to check its timestamp.

Then the browser can poll, making HEAD requests, which will check the update times on the file to see if it needs an updated copy.

This avoids making a DB call for anything that doesn't change the data, but at the expense of keeping file system copies of important resources. It might be a good trade-off, though, if you can do this for active data, and roll them off after some time. You will need to ensure that you manage to change this on any call that updates the data.

It shares the synchronization risks of any systems with multiple copies of the same data, but it might be worth investigating if the enhanced responsiveness is worth the risks.

于 2012-07-09T17:28:22.530 回答
1

曾经有一种称为“服务器推送”的技术,它让一个 Web 服务器进程坐在那里等待脚本的更多输出,并在它出现时将其转发给客户端。这是 1995 年最热门的新技术,虽然你可能仍然可以做到,但没有人这样做,因为这是一个非常糟糕的想法。

所以,是的,你可以,但是当你到达那里时,你很可能希望你没有。

于 2012-07-09T17:15:27.570 回答
0

好吧,您可以(或将要)使用 HTML5 套接字。

此页面包含有关此技术的一些重要信息:

http://www.html5rocks.com/en/tutorials/websockets/basics/

于 2012-07-09T17:14:14.430 回答