Php 高效地重新加载数据/将数据从服务器推送到客户端

Php 高效地重新加载数据/将数据从服务器推送到客户端,php,javascript,stream,client-server,comet,Php,Javascript,Stream,Client Server,Comet,我正在寻找将数据从web服务器重新加载到前端的“方法”(即最有效、最常用、最普遍接受的方法)。在最终应用程序中,我将有几个必须写入数据的输出字段,例如: 在最终应用程序中,数据流将彼此不同。这些行必须重新加载来自服务器的最新数据 我一直在考虑使用Ajax请求每秒钟更新一次,但必须有其他方法才能做到这一点。Ajax请求将导致大量数据流量。此外,当你使用Facebook聊天时,你不必每秒钟都等待,聊天几乎是即时收到的。然而,当我使用Mozilla Firefox的开发工具时,我没有看到任何Ajax

我正在寻找将数据从web服务器重新加载到前端的“方法”(即最有效、最常用、最普遍接受的方法)。在最终应用程序中,我将有几个必须写入数据的输出字段,例如:

在最终应用程序中,数据流将彼此不同。这些行必须重新加载来自服务器的最新数据

我一直在考虑使用Ajax请求每秒钟更新一次,但必须有其他方法才能做到这一点。Ajax请求将导致大量数据流量。此外,当你使用Facebook聊天时,你不必每秒钟都等待,聊天几乎是即时收到的。然而,当我使用Mozilla Firefox的开发工具时,我没有看到任何Ajax轮询请求。这让我想到,是否会有一种不同的方式来做到这一点

我已经研究了Node.js,但我的主机似乎不可能做到这一点

我听过人们谈论Ajax推送,这是我应该使用的吗?如果是的话,你能给我一个基本用法的例子吗

如果不是,那么当有多个数据流必须在一秒钟内重新加载时,该怎么办

要求是速度和低数据流量。因此,我认为连续轮询服务器不是一种选择,因为这将产生巨大的开销


我不认为这有什么重要意义,但我在后端使用PHP5.3,在前端使用jQuery 1.9.1的JavaScript。

我认为您正在寻找的通常称为。这项技术经常发挥作用的原因如下:

  • 客户端(web浏览器)向服务器请求新数据。这不是重新加载页面,而是在JavaScript中完成的
  • 当服务器为客户端提供一些数据时,它会响应请求。同样,这不会影响UI,因为重新加载的不是页面本身:数据的借出是在“后台”完成的,可以说是在JavaScript代码中完成的
  • 在服务端,请求等待新数据,并在可用时返回新数据,或者在达到超时间隔(在服务器上定义)时不返回任何内容。此超时通常设置为低于浏览器HTTP超时。这样做的原因是,服务器可以知道特定的客户端是否获得了特定的数据。如果允许请求在客户端超时,则在客户端超时后,服务器可能会响应原始请求,并且客户端将不会获取数据,即使服务器认为已经获取了数据
数据实际上通常以JSON的形式传输,但是您可以选择任何您想要的编码。有关如何执行此操作的示例,请参见。是这种技术的另一个例子,也是。所有的代码都是可用的


在PHP端,您需要创建一个页面来响应这些“后台”JavaScript Comet请求。它可能与用户加载的页面相同,但为了便于解释,假设它不同。因此,用户加载
index.php
,JavaScript Comet代码调用
getNewData.php
来检索新数据

getNewData.php
中,您需要等待事件并返回数据。您不想为此使用轮询,但是有一些PHP库允许您使用各种进程间通信策略来等待事件,请参阅。
getNewData.php
的高级伪代码如下所示:

  • 解析JSON请求
  • 输入有效等待状态(超时),等待“新数据可用”事件
  • 上一步是否超时?
    是:发送表示无数据的响应
    否:使用新数据发送响应

  • 这个问题已经被问了很多次,但方式略有不同。以下是一些值得一读的参考资料:

    总而言之:如果您正在考虑在Apache上使用PHP构建解决方案,那么保持开放的持久连接(HTTP长轮询或流)将非常快地消耗资源(效率非常低)。因此,您最好使用(*免责声明-我为托管解决方案工作)

    HTTP长轮询和HTTP流是已被服务器发送事件和WebSocket取代的解决方案。因此,在可能的情况下(在web客户端提供支持的情况下),您应该在返回到基于HTTP的解决方案之前使用这些解决方案之一。一个好的实时网络技术会自动为你处理这个问题

    因为你的图表显示你订阅了多个数据流,所以你也应该考虑一个自然适合的解决方案。同样,一个好的实时网络技术解决方案将为您提供这一点


    另请参见。

    虽然这个答案在技术上是正确的,但它建议采用过时且效率低下的解决方案,最好采用最新的技术来解决。Comet是HTTP黑客实现所需功能的总称。HTML5的引入使得这些黑客不再是解决这类问题的第一个调用端口。此外,在PHP服务器上使用长轮询方法(如本答案中所述)将非常低效。+1跟踪此信息花费了我一段时间来完成我最近发布的一个项目。我没有任何web开发经验,并且惊讶地发现将数据从web服务器推送到浏览器是如此罕见。