Je travaille actuellement sur une application Web qui utilise Spring 3.1 et Hibernate 4.
Conformément à l'exigence, je souhaite implémenter les notifications Push, comme Facebook, sur une page JSP. Si vous avez des suggestions, veuillez également répertorier les navigateurs compatibles avec leurs versions.
Si vous pouvez effectuer une mise à niveau vers ou utilisez JDK 7, je vous suggère d’utiliser Vert.x Vertx.io , utilisez Sockjs du côté client. Vert.x a une implémentation complète du serveur sockjs, je vais essayer de vous suggérer un moyen de l’implémenter. Pour le reste, veuillez consulter la documentation
L'implémentation du serveur pourrait être comme ça
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>);
Du côté client, enregistrez un gestionnaire comme celui-ci lors du chargement de document
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;
};
}
}
Vous pouvez ensuite enregistrer un gestionnaire à n’importe quelle adresse - l’adresse ici peut être n'importe quoi, supposons que ce soit "AwesomeNotifications"
function subscribe(address) {
if (eb) {
eb.registerHandler(address, function(msg, replyTo) {
console.log("Reply recieved")
});
}
}
Une fois que tout est configuré, vous pouvez maintenant transmettre toutes les données du serveur à cette adresse à l'aide du bus d'événements créé précédemment.
eventBus.publish("AwesomeNotifications", new JsonObject(<some hashmap to serialize>))
J'espère que cela t'aides
Vous pouvez utiliser l'option d'envoi de serveur HTMl5 . Ici, vous pouvez obtenir plus de détails.
Option Server-Send:
http://www.w3schools.com/html/html5_serversentevents.asp
Java servelt pour server-send:
Servlet Java et événements envoyés au serveur
Didacticiel :
http://peaktechie.blogspot.in/2012/04/small-tutorial-on-html5-server-sent.html
Navigateurs compatibles HTML5:
J'ai étudié cela récemment. Une approche basée sur les événements est un excellent moyen de structurer des applications Web à page unique, mais elle peut également être utilisée dans des applications Web multi-pages.
Il y a un certain nombre de façons de le faire:
Enfin, je pense que pour l’auteur la question, en s’intégrant à un projet spring-mvc , Atmosphere est clairement le meilleur choix.
Edit: fautes de frappe
J'ai utilisé Atmosphère pour le faire. Il utilise WebSockets si elles sont supportées par le navigateur, et retourne joliment à polling sinon. Ils ont également un plugin Nice jQuery pour vous simplifier la vie.
Je vous conseillerais d'y aller avec Long Polling aka Comet
. Je l'ai utilisé pour envoyer des nombres aléatoires au client. Vous pouvez également vous référer à this question.
Ma suggestion serait d'utiliser un middleware de type MQTT publication-souscription ou le protocole XMPP. Si vous envisagez d'envoyer de petits morceaux de messages, il est préférable d'utiliser MQTT, car il s'agit du moyen le plus léger. Il a beaucoup de bibliothèques de clients, y compris javascript et très facile à développer et à gérer.
Nous utilisons XMPP depuis longtemps pour prendre en charge les notifications Push, mais conserver un serveur Ejabber (ou autre) est très difficile.
En outre, nous sommes actuellement passés à socket.io qui a une implémentation client et serveur, mais vous devez conserver le serveur nodejs et commencer à jouer avec js.
J'ai également testé faye dans un projet et fonctionne parfaitement pour les environnements Ruby.
Mais à la fin, je pense que la meilleure solution consiste à utiliser une bibliothèque que vous pouvez intégrer à votre serveur (Java) et à oublier d’autres technologies, je pense que Atmosphere est une bonne solution avec client et serveur également.