Server zu Client Kommunikation

raptor09

Mitglied
Hallo zusammen :)

Ich habe eine Frage zur Kommunikation zwischen Client und Server. In der klassischen Client-Server-Kommunikation ist es ja so, dass der Server auf Anfragen von Seiten des Clients wartet, bevor er in Aktion tritt. Also wenn ich eine Tabelle habe, die ich sekündlich aktualisiert haben möchte, dann muss der Client jede Sekunde eine Anfrage an den Server schicken: "Schick mir doch die aktuellsten Daten".

Jetzt meine Frage:
Wie funktioniert es, dass die ganze Sache andersherum läuft? Sprich also, der Server tut folgendes: Warten, bis Daten vorhanden sind und dann selbstständig einen Datensatz an den Client schicken.

Ich habe nun Daten, die sekündlich aktualisiert werden sollen, und Daten, die unregelmäßig aktualisiert werden. Der Server soll nun die Ersteren jede Sekunde selbstständig schicken, bei dem zweiteren soll er schicken, sobald diese vorhanden sind.

Ist das überhaupt möglich? Und wenn ja, wie (in Java)?

Vielen Dank euch bereits an dieser Stelle für eure Hilfen :)


P.S.:
Falls so ein Thema in diesem Forum bereits existiert: Ich war nicht zu faul die Suche zu benutzen - nur leider habe ich keine Ahnung, nach was ich hier genau suchen soll. Die Suchbegriffe, die mir eingefallen sind ergaben nichts in diese Richtung. Dasselbe mit Google ;)

P.P.S.:
Ich freue mich auch schon über die genaue Bezeichnung dieser Kommunikationsweise, sodass ich mich auf eigene Faust danach erkundigen kann :)
 
Zuletzt bearbeitet:

FArt

Top Contributor
Was du haben möchtest nennt sich Callback.
Ich empfehle die Verwendung einer guten API wie Apache Mina oder JBoss Remoting. Interessant könnte auch JGroups sein.
 

Swoop

Gesperrter Benutzer
Hallo zusammen :)

Ich habe eine Frage zur Kommunikation zwischen Client und Server. In der klassischen Client-Server-Kommunikation ist es ja so, dass der Server auf Anfragen von Seiten des Clients wartet, bevor er in Aktion tritt. Also wenn ich eine Tabelle habe, die ich sekündlich aktualisiert haben möchte, dann muss der Client jede Sekunde eine Anfrage an den Server schicken: "Schick mir doch die aktuellsten Daten".
Das nennt sich Pollen und wird auch bei kleinen Anfragen häufig verwendet...
 

TheDarkRose

Gesperrter Benutzer
Wenn der Server nicht gerade ein HTTP-Server ist, sondern ein selbstprogrammierter, kannst du einfach die Verbindung offen lassen und der Server sendet sekündlich die neuen Daten an den Client.

Gesendet von meinem GT-I9000 mit Tapatalk 2
 

Zeeu

Aktives Mitglied
Ich denke das Entwurfsmuster "Observer" könnte hier recht hilfreich sein, ein Client meldet sich beim Server an, und sobald der Server eine Änderung wahrnimmt, schickt der eine Nachricht an alle angemeldeten Clienten.
Triffts das, was du brauchst ? Wenn ja google mal nach Observer oder Beobachter
 
T

tuxedo

Gast
Ergänzend zur MINA oder JBOSS Remoting Empfehlung:

* Java RMI
* SIMON
* <irgend ein anderer RPC Mechanismus>
 

raptor09

Mitglied
Hallo und vielen Dank für die vielen hilfreichen Antworten! :)

Ich habe die letzten zwei Tage seehr viel Info in meinen Kopf hineingeprügelt :D Bevor ich noch ein paar Fragen habe, möchte ich das hier mal zusammenfassen, dann hat vielleicht auch ein zukünftiger Leser des Forums noch einen Mehrwert davon. Und vielleicht ist jemand so nett und berichtigt mich, wenn ich etwas grundlegendes nicht richtig verstanden habe :)

Long-Polling: AJAX-Requests werden an den Server geschickt. Wenn neue Information verfügbar ist, wird diese direkt zurück geschickt. Ist keine neue Information verfügbar, verändert sich das Vorgehen im Vergleich zu klassischen AJAX-Requests: Anstatt dass die (meistens nutzlose) Antwort geschickt wird, dass keine neuen Informationen verfügbar sind, wartet der Server mit der Antwort, bis neue Information eintrifft und sendet erst dann eine Antwort. Der Client schickt sofort wieder eine Anfrage und das Spiel beginnt von vorn.

Observer-Pattern: Ein Beobachtendes Objekt ("Observer") registriert sich bei einem zu beobachtenden Objekt ("Subject"). Das Subject speichert alle Observer in einer Liste. IdR implementieren die Observer ein Interface, das eine Methode zur Aktualisierung des Observer-Objekts beinhaltet. Ändert sich etwas am Subject, werden alle Observer über die Aktualisierungsfunktion über die neuen Informationen unterrichtet.

Java RMI (Remote Method Invocation): Die Kommunikation zwischen Client und Server funktioniert so, als seien beide in der selben JVM (Java Virtual Machine). Client und Server implementieren beide Methoden, die der jeweils andere aufrufen kann / soll. Damit das JVM-übergreifend funktioniert, implementieren Client und Server Stellvertretermethoden der aufrufbaren Methoden des jeweils anderen. Über die Stellvertretermethoden wird die Methode des Servers (oder vom Server aus die des Clients) so aufgerufen, als sei diese lokal vorhanden. Die Stellvertretermethode übernimmt dabei die Kommunikation zwischen Server und Client über das RMI Wire Protocol. Damit Methoden und Objekte von anderen Systemen aufrufbar sind, müssen diese sich bei einem Adressdienst registrieren.



Das mit den Server-Sockets habe ich nicht ganz verstanden. Abstrakt gesagt öffnet man in Javascript eine Verbindung zum Server und überwacht diese auf Nachrichten vom Server, die Events in Javascript auslösen. Hat das denn eine relevante Alternative, wenn auf Clientseite eine Java-Applikation läuft und die Informationen nicht über den Web-Browser angezeigt werden?

Das Obersver-Pattern ist vermutlich für die Kommunikation zwischen Client und Server nur relevant, wenn man es in Verbindung mit der RMI-Mechanik verwendet, oder sehe ich das falsch?

Vielen Dank schonmal an dieser Stelle für eure hilfreichen Antworten :)

P.S.: Vielleicht als Randinfo interessant: ich arbeite an einer GUI eines Callcenters, das seine Daten von einem in Java geschriebenen Callcenter-Core im JSON-Format bezieht. Nun ist meine Aufgabe, alternative Kommunikationsmöglichkeiten zu finden und zu evaluieren.
 
Zuletzt bearbeitet:
T

tuxedo

Gast
P.S.: Vielleicht als Randinfo interessant: ich arbeite an einer GUI eines Callcenters, das seine Daten von einem in Java geschriebenen Callcenter-Core im JSON-Format bezieht. Nun ist meine Aufgabe, alternative Kommunikationsmöglichkeiten zu finden und zu evaluieren.

Das hättest du wohl gleich zu Beginn erwähnen sollen.

Daraus ergeben sich ganz neue Frage:

1. Ist es angedacht bei Bedarf den Callcenter-Core um eine andere Schnittstelle als JSON (bis jetzt vermutlich über HTTP?) zu erweitern?

2. Das jetzige "GUI" ist eine Webanwendung? PHP, JSP/JSF, ...? Wenn ja: Muss das "neue" wieder eine Webanwendung sein?



Unter der Vorraussetzung dass der Callcenter-Core nicht angefasst werden darf/soll, sind die Möglichkeiten natürlich etwas eingeschränkt. RMI und Jboss Remoting fallen weg, da JSON hier nicht ins Konzept passt. Dinge wie MINA wohl auch (ich geh davon aus dass der Core JSON via HTTP ausliefert, da macht es keinen Sinn MINA einzusetzen).
 

raptor09

Mitglied
1. Ist es angedacht bei Bedarf den Callcenter-Core um eine andere Schnittstelle als JSON (bis jetzt vermutlich über HTTP?) zu erweitern?

Mir sind in diesem Punkt alle Freiheiten gegeben. Ich liebäugel momentan mit Java RMI, da sich das nach einiger Recherche sehr vielversprechend anhört und sich anbietet, da der Callcenterclient und -core beide in Java geschrieben sind.


2. Das jetzige "GUI" ist eine Webanwendung? PHP, JSP/JSF, ...? Wenn ja: Muss das "neue" wieder eine Webanwendung sein?

Das jetzige GUI ist eine Webanwendung, das neue GUI ist bisher ein normales Java-Programm, mit Verwendung des JAvaFX-Frameworks. Es ist nach meinem Informationsstand möglich, eine JavaFX-Anwendung in den Browser auszuführen. Wie genau das geht, da habe ich mich bisher nur flüchtig informiert, aber die Sprache des GUI bleibt Java mit JavaFX.


Den Callcenter Core selbst fasse ich nicht an, ich simuliere diesen, in dem ich mir einen eigenen Mini-Core bastle. Meine Aufgabe ist es auch nicht, dass das GUI später voll implementiert wird, sondern einen Prototyp zu bauen, der es möglich macht, die neue GUI zu testen. Dabei geht es eben auch um alternative Kommunikationsmöglichkeiten, weg vom "klassischen" Pull-Mechanismus, also dem normalen AJAX-Request.
Von diesen Alternativen soll ich 1-2 prototypisch implementieren, um dann eine Evaluation und einen Vergleich zur aktuellen IST-Situation durchführen zu können.

Mein Favorit ist wie gesagt Java RMI. Auch in Verbindung mit dem Observer Pattern ließe sich da sicherlich eine Interessante Alternative bauen, oder was meint ihr?

Vielen Dank euch schonmal!
 
T

tuxedo

Gast
Hört sich ganz interessant an. Interessant finde ich vor allem dass ihr offenbar vom Webinterface zu einer "Desktop" Anwendung wollt (ich rechne jetzt mal eine JavaFX Anwendung im Browser ebenfalls zur Desktop-Anwendung). In vielen anderen Bereichen möchte man nämlich weg von der Desktop-Anwendung hin zur Webanwendung.

Zu RMI:

RMI ist nur eine mögliche RPC Implementierung. Daneben gibt's auch noch andere mit weiteren Vor- und Nachteilen. Schau mal in meine Signatur oder google mal nach RPC.
 

raptor09

Mitglied
Hallo Tuxedo,

über den Link in deiner Signatur bin ich auf SIMON gestoßen, und es hat mich zugegebenermaßen neugierig gemacht.
Bist du der Autor dieses Projekts?

Falls nein, du scheinst auf jeden Fall einen guten Draht dazu zu haben, vielleicht kannst du mir dazu ein paar Fragen beantworten.

Meine Benutzung von SIMON fiele ja nicht unter die GPL-Lizenz. Besteht für mich trotzdem die Möglichkeit, das ganze mal auszuprobieren und zu testen?
Da ich mich noch in der Ausbildung befinde wird mein Arbeitgeber sicherlich nicht, nur weil ich diese kommunikationsmöglichkeit mal ausprobieren möchte, bereit sein, die Katze im Sack zu kaufen, ohne dass wir wissen, ob das wirklich die Lösung für uns wäre.
 
T

tuxedo

Gast
Jepp, ich bin der Autor. Sost hätte ich's wohl weniger in meiner Signatur verlinkt.

Support gibt's eigentlich nur über's Support-Forum. Aber um die wichtigsten Fragen schnell zu klären:

Meine Benutzung von SIMON fiele ja nicht unter die GPL-Lizenz.

Keine Ahnung. Die GPL sagt nur: Wenn du das Programm weitergibst, dann musst du das Programm zusammen mit den Quellen und den von GPL geforderten Rechten weitergeben.

Wenn die Callcenter-Software ein Firmeninternes Produkt ist, das von der Firma für die Firma entwickelt wurde, wird das Programm ja nicht weitergegeben. Dann kannst du die GPL Lizenz nutzen.

Wenn das Programm aber von einer Firma für das Callcenter entwickelt wird, dann musst du entweder die GPL einhalten und die Sourcen mitgeben/veröffentlichen, oder eben eine kommerzielle Lizenz erwerben.

Besteht für mich trotzdem die Möglichkeit, das ganze mal auszuprobieren und zu testen?

Ausprobieren und testen geht mit der GPL in jedem Fall.

Da ich mich noch in der Ausbildung befinde wird mein Arbeitgeber sicherlich nicht, nur weil ich diese kommunikationsmöglichkeit mal ausprobieren möchte, bereit sein, die Katze im Sack zu kaufen, ohne dass wir wissen, ob das wirklich die Lösung für uns wäre.

Mir scheint du solltest mal recherchieren wie die GPL funktioniert und was dahinter steckt. Wikipedia ist hier ein erster guter Anhaltspunkt. Im Netz gibt's auszugsweise ein Buch das die GPL erklärt: Die GPL kommentiert und erklärt Online-Version

Weitere Fragen darfst du gerne stellen. Aber dann bitte im Support-Forum. Dann haben andere Hilfesuchende auch etwas davon.

Gruß
Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
L Ratschlag zur Umsetzung einer client-server-Kommunikation Netzwerkprogrammierung 6
V Socket UDP Server/Client Kommunikation sehr langsam Netzwerkprogrammierung 2
F Socket Server/Client Kommunikation Netzwerkprogrammierung 4
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
D Server-Client (Web) Kommunikation Netzwerkprogrammierung 9
E Client-Server-Kommunikation Netzwerkprogrammierung 13
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
G Problem mit Client-Server Kommunikation Netzwerkprogrammierung 4
G unvollständige Daten: Http Client-Server-Kommunikation Netzwerkprogrammierung 2
J client/server kommunikation Netzwerkprogrammierung 3
M Client-Kommunikation ohne Server Netzwerkprogrammierung 7
S Kommunikation Fortran <-> Java auf Client-Server-Archi Netzwerkprogrammierung 2
G JINI über RMI // Client-Server Kommunikation Netzwerkprogrammierung 4
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
K C# Server - Android Client Netzwerkprogrammierung 0
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
E Thematik Client server Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
J Client Server - Serialisierung Netzwerkprogrammierung 8
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
K Client => Server Netzwerkprogrammierung 2
A ? Home-Network, Server/Client-Einrichtung Netzwerkprogrammierung 4
S Socket Server: ConnectionError vom Client erkennen Netzwerkprogrammierung 31
A Java Server - IOS Client Applikation Netzwerkprogrammierung 20
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
N Client-Server-Datenbank Netzwerkprogrammierung 13
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
B Client/Server Connection Problem Netzwerkprogrammierung 2
S Server Client Daten hin und herschicken Netzwerkprogrammierung 2
D TCP Verbindung (Java Client und Visual Basic Server) Netzwerkprogrammierung 12
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
T Server und Client verbinden nicht Netzwerkprogrammierung 6
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
das-mo Client/Server sendet nicht Netzwerkprogrammierung 7
Z Socket Server/Client vernünftiger Verbindungsabbruch Netzwerkprogrammierung 4
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
F TCP Server/Client Netzwerkprogrammierung 14
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
N eine klasse mit server & client Netzwerkprogrammierung 5
D RMI Gui auf client updaten basierend auf den Property Änderung des Models auf dem Server ohne polling Netzwerkprogrammierung 12

Ähnliche Java Themen

Neue Themen


Oben