我正在寻找将数据从Web服务器重新加载到前端的'方法去'(即最有效,最常用,最普遍接受的方式)。在最终的应用程序中,我将有几个输出字段,其中必须写入数据,例如:
最终应用程序中的数据流不同。这些行必须从服务器重新加载新的最新数据。
我一直在考虑使用Ajax请求来像每秒更新,但必须有另一种方法来执行此操作。 Ajax请求将导致大量数据流量。此外,当使用Facebook聊天时,您不必每秒钟等待,几乎立即收到聊天。但是,当我使用Mozilla Firefox的开发人员工具时,我没有看到任何Ajax轮询请求。这让我想到是否会有不同的方法来做到这一点。
我查看了Node.js,但似乎主机无法实现。
我听说有人在谈论Ajax Push,我应该使用什么?如果是这样,你能给我一个基本的用法例子吗?
如果没有,当有多个数据流必须在一秒钟内重新加载时,然后会是什么样的?
要求是速度和低数据流量。因此,我认为不能连续轮询服务器,因为这会产生巨大的开销。
我认为它没有任何重要性,但我在后端使用PHP5.3,在前端使用jQuery 1.9.1的JavaScript。
答案 0 :(得分:8)
这个问题已被多次询问,但方式略有不同。以下是一些值得一读的参考文献:
总结:如果您正在考虑在Apache上使用PHP构建解决方案,那么保持开放持久连接(HTTP长轮询或流式传输)将非常快速地耗尽资源(效率非常低) )。因此,您最好使用hosted solution(*免责声明 - 我为托管解决方案工作)。
HTTP-Long轮询和HTTP Streaming是已被Server-Sent Events和WebSockets取代的解决方案。因此,在可能的情况下(Web客户端提供支持),您应该在回退到基于HTTP的解决方案之前使用其中一种解决方案。一个好的实时网络技术将自动为您处理。
由于您的图表显示您订阅了多个数据流,因此您还应该考虑一个自然适合此问题的Publish/Subscribe解决方案。同样,一个好的实时网络技术解决方案将为您提供这一点。
答案 1 :(得分:2)
我认为你所寻找的通常被称为Comet。这种技术经常被用来做如下工作:
数据确实通常作为JSON传输,但您可以选择您想要的任何编码。有关如何执行此操作的示例,请参阅here。 Goosh是此技术的另一个示例,Interactive Python Shell也是如此。所有的代码都可用。
在PHP方面,您需要创建一个响应这些“后台”JavaScript Comet请求的页面。它可以与用户加载的页面相同,但为了便于解释,让我们说它是不同的。因此,用户加载index.php
并使用JavaScript Comet代码调用getNewData.php
来检索新数据。
在getNewData.php
中,您需要等待事件并返回数据。您不希望为此使用轮询,但有些PHP库允许用户使用各种进程间通信策略来等待事件,请参阅this question for instance。 getNewData.php
的高级伪代码如下所示: