无需轮询或捎带将服务器端更新发送到浏览器
Posted
技术标签:
【中文标题】无需轮询或捎带将服务器端更新发送到浏览器【英文标题】:Sending Server side updates to Browser without polling or piggybacking 【发布时间】:2012-04-07 12:45:09 【问题描述】:我正在尝试在没有客户端(浏览器)请求更新的情况下将数据从服务器推送到客户端。
我的应用程序基于 JBoss 服务器上的 JSF2.0(带有 JSP)和 RF3.3。
我已经浏览了许多链接来尝试了解如何实现它。 长轮询、piggybacking、服务器端轮询等术语我都懂。
我猜它可以使用 COMET 和大气来完成(我认为它不适用于 JBoss),但我不确定是否相同。主要问题是我几乎想不出一个起点,因为我在网上找不到任何类型的代码教程或演示代码。
此外,起点本身并不是很清楚,我应该从哪里开始,以及在实现所需功能的过程中我需要什么。
谁能指导我这个话题。我对这个话题很迷茫。
一般用例场景是用户正在浏览我的应用程序中的某个网页,突然我需要在页面上发出通知或更新一个值,而无需用户发出相同的请求。
【问题讨论】:
你看过网络套接字吗? 是的..但我不知道从哪里开始... @ta.speot.is 你能指导我从哪里开始并实现它的演示...... 【参考方案1】:如果您愿意使用 RF 4.0.X,这里有一个示例说明如何使用 ajax 推送。你可以在这里找到一个例子
http://anonsvn.jboss.org/repos/richfaces/branches/4.0.0.CR1/examples/push-demo/src/main/webapp/chat.xhtml
http://anonsvn.jboss.org/repos/richfaces/branches/4.0.0.CR1/examples/
如果您必须坚持使用 RF 3.3,您可以在此处找到相关示例作为起点
http://anonsvn.jboss.org/repos/richfaces/branches/community/3.3.X/samples/
【讨论】:
您能否在哪里可以找到您提到的 RF3.3.X 链接上的相关数据【参考方案2】:RF4.2 确实使这变得非常简单,但我发现如果您不想要 RichFaces,通过 jQuery 轮询一个特殊的 servlet 也同样有效。
// javascript part
jQuery.ajax(
url : "/poll?sessionKey=" + sessionKey,
dataType : "text",
success : function(data)
// ... Do your thing to depending on the contents of data.
,
error : function(xhr, ajaxOptions, thrownError)
// ... Oops, something went wrong.
);
// Server part
@WebServlet(urlPatterns = "/poll")
public class pollServlet implements Servlet
轮询非常便宜,您可以每隔几秒钟进行一次,而不会产生太大影响。另一个好处是您可以监控浏览器窗口是否仍然打开。
【讨论】:
甚至可以从 RF3.3 使用以上是关于无需轮询或捎带将服务器端更新发送到浏览器的主要内容,如果未能解决你的问题,请参考以下文章