有没有一种方法可以从Web服务器向浏览器推送数据?

138
当然我知道Ajax,但Ajax的问题在于浏览器需要频繁轮询服务器以查找是否有新数据。这会增加服务器负载。是否有更好的方法(包括使用Ajax)可以不经常轮询服务器?

1
我不确定是否存在这样的解决方案。为了让应用程序在概念上更简单,我想你可以在轮询请求之上实现一个传输层,从而将轮询责任从应用逻辑中移除。也许已经有人实现了这个功能?<strong>编辑:</strong>显然它被称为<a href="http://en.wikipedia.org/wiki/Reverse_Ajax">反向Ajax</a>和<a href="http://en.wikipedia.org/wiki/Comet_(programming)">Comet</a>,但目前看来你必须自己实现它。有没有针对此功能的JavaScript库呢? - Anders Sandvig
1
@Rachel - 实时更新,让你可以看到其他人在做什么。对于像 StackOverflow 这样的网站以及像 Google 文档这样的协作 Web 应用程序非常有用。 - Itai Bar-Haim
1
在2016年进行这种操作的人可能会发现WebSockets是这种通信的更好选择。 - Shadow
18个回答

2

2

还有其他方法。不确定它们在您的情况下是否更好。您可以拥有一个Java小程序,它在页面加载时连接到服务器并等待服务器发送的内容。这将启动速度较慢,但允许浏览器以不频繁轮询的方式从服务器接收数据。


2
通过使用持久的HTTP连接,可以实现您所追求的目标。
请查看维基百科上的Comet文章,那是一个很好的开始。
如果您正在构建某种事件驱动的网站(比如digg spy),或者类似这样的东西,您可能需要实现一个隐藏的IFRAME,连接到一个永远不会关闭的URL,然后从服务器向客户端推送脚本标签以执行更新。

1

1
你可以尝试使用我们的彗星组件,但它非常实验性……!

1

一旦与服务器建立连接,它可以保持打开状态,服务器可以推送内容。以前我使用 multipart/x-mixed-replace 实现过这个功能,但在 IE 中无法正常工作。

我认为你可以通过轮询来实现巧妙的操作,使其更像是推送,而不是发送未更改的头部内容,但我从未尝试过。


0

0
如果您正在使用jsp页面,也可以了解一下Java Pushlets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接