推送Java Web应用程序通知

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

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

如果您可以升级到或正在使用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(); 

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

  function () { if (!eb) { eb = new vertx.EventBus("http://:/pusher"); eb.onopen = function() { console.log("connected") }; eb.onclose = function() { console.log("Not connected"); eb = null; }; } 

}

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

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

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

 eventBus.publish("AwesomeNotifications", new JsonObject()) 

希望这可以帮助

您可以使用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

我最近一直在研究这个问题。 基于事件的方法是构建单页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提供后备,它可能不是你现在最好的选择。

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

编辑:错别字

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

我建议你选择Long Polling aka Comet 。 我用它给客户端扔了随机数。 您也可以参考这个问题。

我的建议是使用基于发布 – 订阅的MQTT中间件或XMPP协议。 如果您计划发送小块消息,那么最适合使用MQTT,因为它是最轻量级的方法。 它有很多客户端库,包括javascript,非常容易开发和管理。

我们已经使用XMPP很长时间来支持推送通知,但是保留Ejabber服务器(或其他)是非常困难的。

另外,实际上我们已经转移到具有客户端和服务器实现的socket.io ,但你必须保持nodejs服务器并开始使用js。

我还在一个项目中测试了faye ,并且非常适合Ruby环境。

但最后,我认为更好的解决方案是使用可以嵌入服务器(java)的库并忘记其他技术,我认为Atmosphere对于客户端和服务器也是一个很好的解决方案。