将数据推送到页面而不定期检查它?

时间:2012-07-09 17:11:38

标签: php javascript jquery mysql ajax

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

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

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

有没有办法让它比查询数据库和检查存储'if updated'数据的表更高效,还是告诉ajax函数从另一个页面执行?

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

或者您可以在文本文件中存储“if updated”数据?欢迎任何建议。

4 个答案:

答案 0 :(得分:2)

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

  1. 您使用的是什么网络服务器? (你只限于某种语言吗?)
  2. 您需要支持哪些浏览器?
  3. 您最好的选择是使用 WebSockets 来完成这项工作,除了使用网络套接字之外的任何事情都是黑客攻击。不过,很多“黑客”工作得很好,我建议您尝试 Comet AJAX长轮询

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

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

    祝你好运。

答案 1 :(得分:2)

另一种可能性是,如果您可以将简单格式的数据存储在文件中,则使用数据更新文件并使用Web服务器检查其时间戳。

然后浏览器可以轮询,发出HEAD请求,这将检查文件的更新时间,看是否需要更新的副本。

这可以避免对任何不会更改数据的内容进行数据库调用,但会以保留重要资源的文件系统副本为代价。但是,如果您可以为活动数据执行此操作,并在一段时间后将其滚动,则可能是一个很好的权衡。您需要确保在任何更新数据的调用中设置更改此项。

它与具有相同数据的多个副本的任何系统共享同步风险,但是如果增强的响应能力值得冒险则可能值得研究。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

你可以(或将会)使用HTML5套接字。

此页面提供了有关此技术的一些很好的信息:

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