Wie sende ich Nachrichten vom Server zum Client?

8

Ich werde etwas implementieren, das der Facebook-Benachrichtigung und dieser Website ähnelt (Benachrichtigung von StackOverflow, die uns benachrichtigt, wenn jemand einen Kommentar / eine Antwort usw. für unsere Frage schreibt). Bitte beachten Sie, dass Nutzer meine Anwendung als Website und nicht als mobile Anwendung verwenden werden.

Ich stieß auf folgende Antwort , die die Ergebnisse abrufen, aber Ich muss die Ergebnisse nicht abrufen.

Basierend auf Vorschlägen habe ich eine einfache Methode in meiner Entity-Klasse erstellt und die @PostPersist hinzugefügt, aber es hat nicht so funktioniert auf Basis von diese Antwort Ich habe die Datei persistence.xml hinzugefügt, um die Listener zu definieren, aber nach session.save (user) wird die Aftersave-Methode nicht ausgelöst.

Benutzer.java

%Vor%

persistence.xml

%Vor%

pom.xml

%Vor%     
J888 27.06.2013, 07:11
quelle

6 Antworten

13

Klingt wie eine Aufgabe für WebSockets . Es ist Teil von Java EE 7, also sollte der Glassfish einer der ersten AS sein, die ihn unterstützen.

Zum Abfangen des DB-Zugriffs können Sie @PostUpdate und @PostPersist verwenden. Hier finden Sie eine Frage .

Es gibt viele Möglichkeiten, den so genannten Server Push auszuführen, um die verbundenen Clients zu benachrichtigen:

EDIT: In der Java-Welt gibt es einige Frameworks, in denen Server Push (Reverse Ajax) sofort implementiert wird. Wenn Sie mit GWT vertraut sind, würde ich Errai vorschlagen . Eine andere Alternative ist die Atmosphre . Der Nachteil des Atmospere ist die Tatsache, dass es einen eigenständigen laufenden Prozess neben Ihrem normalen Anwendungsserver mit Ihrer Web-App erfordert. Ich habe vor einem Jahr damit gespielt, das könnte sich seitdem geändert haben.

Im Allgemeinen ist es schwierig, Ihnen einen konkreten Code zur Verfügung zu stellen, da dies von dem Framework abhängt, das Sie wählen werden. Ich kenne Errai , also hier ein Beispiel:

Serverseite:

%Vor%

Kundenseite:

%Vor%

Andere Vorteile der Verwendung des Errai sind die CDI auf dem Server und auf dem Client out-of-the-box, eine andere Sache, die schön ist, ist die Verwendung der Web-Sockets unter den Abdeckungen es wird unterstützt und fällt auf andere Lösungen zurück.

Was auch immer Sie auswählen, es sollte zu Ihrer vorhandenen Infrastruktur und zu Ihrem clientseitigen UI-Framework passen.

    
Jiri Kremser 27.06.2013, 13:01
quelle
4

mqtt kann für Server Pushing und Nachrichtenübertragung verwendet werden.

Es gibt weitere Detailinformationen in Ссылка .

======================================

Aktualisiert: 11. Juli 2013

Mqtt ist ein Publish / Subscribe-Protokoll, das extrem einfach und leicht ist. Wenn der Server ein Publisher und ein Client-Browser ist, die das Thema abonnieren, auf dem der Server veröffentlicht, kann der Server die Nachricht direkt an den Client senden.

Eine nützliche Ressource:

Mosquitto ist ein Open-Source-MQtt-Server. Einfach zu installieren und zu konfigurieren.

mqtt-client ist ein bewährter, leistungsstarker Java-mqtt-Client.

    
oldmonk 09.07.2013 03:50
quelle
4

Verwenden Sie Node JS und socket.io

Diese Technologie wählt basierend auf dem vom Client verwendeten Browser die beste Transportmethode aus.

Für die neuesten Browser verwendet es Web-Sockets und für andere wird es elegant zu Flash Socket oder Long Pooling degradiert. Weitere Informationen finden Sie hier

Was Sie tun müssen, ist einen Server mit diesen Technologien einzurichten. Der Server würde an einem bestimmten Port laufen. Alle Clients würden diesen Port abhören und der Server wäre in der Lage, über diesen Port Daten an den Client zu senden.

    
Manu 19.07.2013 06:47
quelle
4

Komet auch bekannt als Reverse Ajax , ist ein Webanwendungsmodell, bei dem eine lange gehaltene HTTP-Anfrage es einem Webserver ermöglicht, zu pushen Daten an einen Browser senden, ohne dass der Browser dies explizit anfordert.

Comet (ALA langlebiges HTTP, Server-Push) ermöglicht es dem Server, die Informationsanforderung des Browsers sehr langsam zu beantworten und weiterhin nach einem vom Server vorgegebenen Zeitplan zu antworten. Weitere Informationen zu Comet finden Sie unter:

DWR ist eine Java-Bibliothek, mit der Java auf dem Server und JavaScript in einem Browser interagiert und aktiviert werden kann Rufen Sie sich so einfach wie möglich an. Mit Reverse Ajax ermöglicht DWR, dass Java-Code, der auf einem Server ausgeführt wird, Client-seitige APIs zum Veröffentlichen von Aktualisierungen in beliebigen Browsergruppen verwendet. Dies ermöglicht Interaktion 2 Möglichkeiten - Browser-Aufruf Server und Server Aufruf Browser. DWR unterstützt Comet, Polling und Piggyback (das Senden von Daten mit normalen Anforderungen) als Möglichkeiten zum Veröffentlichen in Browsern.

DWR bietet Integration mit Spring, Struts, Guice, Hibernate und anderen. Sie können mehr von hier lesen.

Andere Comet- und Reverse-AJAX-Frameworks:

Ankur Lathi 19.07.2013 07:10
quelle
2
  

aber nach session.save (user) wird die Aftersave-Methode nicht ausgelöst.

  • @PostPersist ist ein JPA-Callback.
  • session.save() ist eine nicht-JPA, Hibernate-proprietäre Methode. JPA verwendet entityManager.persist() .
  • Sie verwenden inkompatible Funktionen
Glen Best 04.07.2013 05:32
quelle
2

Überprüfen Sie alle 30 Sekunden oder nach Bedarf auf Updates vom Server.

%Vor%     
Vinit Prajapati 25.07.2013 10:47
quelle