web-dev-qa-db-fra.com

Notification Push pour application Web Java

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.

15
Tarun Gupta

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

23
winash

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:

http://fmbip.com/litmus

13
SANN3

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:

  • ActiveMQ AJAX - publiez et abonnez-vous aux événements JMS directement à partir de javascript dans le navigateur. C'est assez basique, avec moins de cloches et de sifflets que les autres approches, mais à cause de sa simplicité, peut être une bonne base pour commencer si vous a) utilisez déjà activemq, b) comme ne pas avoir trop de couches d'abstraction
  • Atmosphère - Le cadre basé sur les événements permet de détecter automatiquement le meilleur mécanisme de communication en fonction du serveur Web et du support actuellement utilisés. Un joli framework Nice, qui supporte une gamme complète de navigateurs et serveurs Web, même jusqu’à IE6 . Et il existe des exemples d'utilisation de Atmosphere avec Spring MVC et Spring Integration .
  • Cometd - Une implémentation du protocole de Bayeux (pour négocier automatiquement le meilleur type de connexion) basée sur jetty/hightide. Jetty était le premier serveur Web Java à prendre en charge les continuations, qui fait désormais partie de la dernière spécification Servlet. Cometd prend Jetty et l’emballe avec les bibliothèques clientes JS pour la détection automatique du meilleur mécanisme de connexion au navigateur.
  • Vert.x - Une plate-forme serveur basée sur des événements et sur laquelle vous pouvez construire. Vert.x a récemment fait l'objet de controverses lorsque son auteur a quitté VMware, mais VMware a conservé le projet. Il semble maintenant que la version 2 sera publiée par la fondation Eclipse. Cela semble très prometteur, mais assez bas. Ce n'est pas le genre de chose que vous connectez simplement à une application Web Java existante.
  • HTML5 EventSource - Méthode d'envoi standard d'événements au navigateur, basée sur des normes. Aucun mécanisme pour renvoyer des événements au serveur. C'est intéressant, mais étant donné que vous devez implémenter une solution de repli pour IE6, IE7 et IE8, ce n'est peut-être pas votre meilleur choix pour le moment.

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

9
David Roussel

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.

7
CodeChimp

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.

1
Sorter

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.

0
Alpay

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.

0
TlmaK0