目前我正在开发一个使用Spring 3.1和Hibernate 4的Web应用程序。
根据要求,我想在JSP页面上实现像Facebook这样的推送通知。如果您有任何建议,请同时列出兼容的浏览器及其版本。
答案 0 :(得分: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>);
在客户端注册文档加载
之类的处理程序 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;
};
}
}
然后您可以将处理程序注册到任何地址 - 这里的地址可以是任何地方,假设它是“AwesomeNotifications”
function subscribe(address) {
if (eb) {
eb.registerHandler(address, function(msg, replyTo) {
console.log("Reply recieved")
});
}
}
完成所有设置之后,您现在可以使用我们之前创建的事件总线将任何数据从服务器推送到此地址
eventBus.publish("AwesomeNotifications", new JsonObject(<some hashmap to serialize>))
希望这有帮助
答案 1 :(得分:13)
您可以使用HTMl5服务器发送选项。 在这里您可以获得更多详细信息
服务器发送选项:
http://www.w3schools.com/html/html5_serversentevents.asp
服务器发送的Java服务器:
Java servlet and server sent events
教程:
http://peaktechie.blogspot.in/2012/04/small-tutorial-on-html5-server-sent.html
HTML5支持的浏览器:
答案 2 :(得分:9)
我最近一直在研究这个问题。基于事件的方法是构建单页Web应用程序的一个很好的方法,但也可以在多页面Web应用程序中使用。
有很多方法可以做到这一点:
对于作者而言,我认为,与spring-mvc项目相结合,Atmosphere显然是最合适的。
编辑:拼写错误
答案 3 :(得分:7)
我用Atmosphere来做这件事。如果浏览器支持WebSockets,它会使用WebSockets,如果没有,则可以很好地回退到轮询。他们还有一个很好的jQuery插件,可以简化生活。
答案 4 :(得分:1)
我建议您使用Long Polling又名Comet
。我已经用它向客户端扔了随机数。您还可以参考this问题。
答案 5 :(得分:0)
我的建议是使用基于发布 - 订阅的MQTT中间件或XMPP协议。如果您计划发送小块消息,那么最适合使用MQTT,因为它是最轻量级的方法。它有很多客户端库,包括javascript,非常容易开发和管理。
答案 6 :(得分:0)
我们已经使用XMPP很长时间来支持推送通知,但是保留Ejabber服务器(或其他)是非常困难的。
另外,我们已经转移到具有客户端和服务器实现的socket.io,但你必须保持nodejs服务器并开始使用js。
我还在一个项目中测试了faye,并且非常适合Ruby环境。
但最后,我认为更好的解决方案是使用可以嵌入服务器(java)的库并忘记其他技术,我认为Atmosphere是客户端和服务器的一个很好的解决方案还