推送Java Web应用程序的通知

Tar*_*pta 19 java jsp spring-mvc push-notification

目前我正在开发一个使用Spring 3.1和Hibernate 4的Web应用程序.

根据要求,我想在JSP页面上实现像Facebook这样的推送通知.如果您有任何建议,请同时列出兼容的浏览器及其版本.

小智 23

如果您可以升级到或正在使用JDK 7我建议使用Vert.x Vertx.io,请在客户端使用Sockjs.Vert.x有一个完整的sockjs服务器实现,我将尝试建议一种实现这个的方法,其余请看文档

服务器实现可能是这样的

    Vertx vertx = Vertx.newVertx();
    EventBus eventBus = vertx.eventBus()
    HttpServer server = vertx.createHttpServer();
    JsonArray permitted = new JsonArray();
    permitted.add(new JsonObject());
    SockJSServer sockJSServer = new DefaultSockJSServer(vertx, server);
    sockJSServer.bridge(new JsonObject().putString("prefix", "/pusher"), permitted, permitted);
    server.listen(<some port>);
Run Code Online (Sandbox Code Playgroud)

在客户端,在文档加载时注册一个像这样的处理程序

 function () {
if (!eb) {
  eb = new vertx.EventBus("http://<your_host>:<your_port>/pusher");

  eb.onopen = function() {
   console.log("connected")
  };

  eb.onclose = function() {
    console.log("Not connected");
    eb = null;
  };
}
Run Code Online (Sandbox Code Playgroud)

}

然后你可以在任何地址注册一个处理程序 - 这里的地址可以是任何东西,假设它是"AwesomeNotifications"

function subscribe(address) {
if (eb) {
  eb.registerHandler(address, function(msg, replyTo) {
  console.log("Reply recieved")
          });

}
}
Run Code Online (Sandbox Code Playgroud)

完成所有设置后,您现在可以使用我们之前创建的事件总线将任何数据从服务器推送到此地址

eventBus.publish("AwesomeNotifications", new JsonObject(<some hashmap to serialize>))
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


SAN*_*NN3 13

您可以使用HTMl5服务器发送选项.在这里您可以获得更多细节

服务器发送选项:

http://www.w3schools.com/html/html5_serversentevents.asp

服务器发送的Java服务:

Java servlet和服务器发送事件

教程:

http://peaktechie.blogspot.in/2012/04/small-tutorial-on-html5-server-sent.html

HTML5支持的浏览器:

http://fmbip.com/litmus


Dav*_*sel 9

我最近一直在研究这个问题.基于事件的方法是构建单页Web应用程序的一个很好的方法,但也可用于多页面Web应用程序.

有很多方法可以做到这一点:

  • ActiveMQ AJAX - 直接从浏览器中的javascript发布和订阅JMS事件.这是非常基本的,比其他方法更少的花里胡哨,但由于它的简单性,如果你a)已经使用activemq,b)可能是一个很好的基础,b)就像没有太多的抽象层
  • 大气 - 基于事件的框架,可以根据网络服务器和当前使用的broswer自动检测最佳通信机制.一个非常好的框架,支持完整的浏览器和网络服务器,甚至可以支持IE6.还有一些使用Atmosphere与spring MVC和Spring Integration的例子.
  • Cometd - 基于jetty/hightide的Bayeux协议(自动协商最佳连接类型)的实现.Jetty是第一个支持continuation的java web服务器,现在是最新的Servlet规范的一部分.Cometd使用Jetty并用JS客户端库包装它,以自动检测到浏览器的最佳连接机制.
  • Vert.x - 基于事件的服务器平台,您可以在其上构建.最近,当作者离开VMware时,围绕Vert.x存在一些争议,但VMware保留了这个项目.现在看来版本2将从Eclipse Foundation发布.似乎非常有希望,但水平相当低.不是那种你只需插入现有java web应用程序的东西.
  • HTML5 EventSource - 基于标准的向浏览器发送事件的方式.没有将事件发送回服务器的机制.这很有意思,但考虑到你需要为IE6,IE7和IE8提供一个后备,它可能不是你现在的最佳选择.

毫无疑问,我认为对于作者而言,整合到一个项目中,Atmosphere显然是最合适的.

编辑:错别字


Cod*_*imp 7

我用Atmosphere来做这件事.如果浏览器支持WebSockets,它会使用WebSockets,如果没有,则会很好地回退.他们还有一个很好的jQuery插件,让生活变得简单.