将服务器端更新发送到浏览器而不进行轮询或搭载

时间:2012-04-07 12:45:09

标签: jsf-2 jboss comet server-push

我正在尝试将数据从服务器推送到客户端,而客户端(浏览器)请求更新。

我的应用程序基于JSF2.0(带有JSP)和JBoss服务器上的RF3.3。

我已经通过众多链接尝试了解如何实现它。 长期民意调查,背驮式,服务器端民调等术语都是我理解的。

我想可以使用COMET和大气来完成(我认为它不适用于JBoss),但我不确定是否相同。主要问题是我很难想到一个起点,因为我没有得到任何类型的代码教程或演示代码在网上做同样的事情。

更重要的是,起点本身并不十分明确,我应该从哪里开始,以及在实现所需功能的过程中我将需要的是什么。

任何人都可以指导我。我对这个话题感到非常失望。

一般用例场景是用户正在浏览我的应用程序中的某个网页,突然之间我需要在页面上发出通知或更新值,而无需用户发出相同的请求。

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

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 {
}

民意调查非常便宜,您可以每隔几秒钟完成一次,而不会产生太大影响。另一个好处是,您可以监视浏览器窗口是否仍处于打开状态。