RMI oder Socket

d3rbastl3r

Bekanntes Mitglied
Moin ^^

Ich wollte mal hier nachfragen ob sich hier jemand genauer mit den zwei Themen auskennt.

Ich möchte eine Client / Server Kommunikation aufbauen, jedoch habe ich keine Ahnung wie ich das ganze umsetzen soll.

1. Java RMI: Hier hat man die Möglichkeit die Funktionen des Servers anzusprechen (mit Parametern, Rückgabewerten usw) ...
`-> Nun möchte ich aber dass der Server auch die Möglichkeit hat Funktionen des Client aufzurufen (z.B.: wenn eine Aktualisierung auf Serverseite vorgenommen wurde möchte man dass alle Clients die Aktuellen Informationen empfangen ohne dass diese eine Anfrage an den Server stellen müssen, ob etwas aktualisiert worden ist).
Soweit ich das RMI-Thema verstanden habe, ist es nur möglich wenn der Client ebenfalls den RMI-Dienst startet.

2. Java Sockets: Hier kann ich eine TCP-Verbindung zwischen Server und Client aufbauen um diverse Informationen auszutauschen.
`-> Die Vorzüge von Java-RMI fallen hier weg.

Nun meine Frage:
Ist es empfehlenswert RMI-Dienst auf der Clientseite zu starten um quasi eine bidirektionale Verbindung herzustellen oder kann man mit Java-Sockets die Methodenaufrufe, auf beiden Seiten, auch ohne Java-RMI elegant lösen ?

Vielleicht noch ein kleines Beispiel zur Problemstellung:
Man möchte eine Lobby schreiben die eine Übersicht über erstellte Spiele bietet.
-> ein Spieler erstellt ein Spiel XY, alle die sich gerade in der Lobby befinden sehen sofort, dass ein Spiel mit dem Namen XY erstellt worden ist.
-> ein Spieler versendet eine Nachricht an einen anderen Spieler, dieser sieht es sofort.
 
Zuletzt bearbeitet:

Nightmares

Aktives Mitglied
Die Antwort auf deine Frage ganz konkret: Vor RMI konnten Server und Client sich auch austauschen. Das ist mehr als elegant zu lösen und bietet bei guter Umsetzung auch mehr Performence.

Die etwas längere:
Ein Datenaustausch ist ebenso über Sockets möglich. Der Client und Server horchen auf Daten und senden diese. Dadurch fällt der ganze RMI Anteil weg, jedoch musst du deine Daten selbst in Bytes konvertieren bzw. ObjectStreams benutzen. Der Nachteil von Sockets (nach java.io) ist, dass du für jede Verbindung mindestens einen Thread brauchst auf Server Seite was schnell zu einem großem Overhead führen kann beim Thread Management (außer auf Linux, da ist das kein Problem). Die alternative ist NIO welches nicht blockt und deshalb besser skalieren kann (nicht muss).
 

d3rbastl3r

Bekanntes Mitglied
Die Antwort auf deine Frage ganz konkret: Vor RMI konnten Server und Client sich auch austauschen. Das ist mehr als elegant zu lösen und bietet bei guter Umsetzung auch mehr Performence.

Die etwas längere:
Ein Datenaustausch ist ebenso über Sockets möglich. Der Client und Server horchen auf Daten und senden diese. Dadurch fällt der ganze RMI Anteil weg, jedoch musst du deine Daten selbst in Bytes konvertieren bzw. ObjectStreams benutzen. Der Nachteil von Sockets (nach java.io) ist, dass du für jede Verbindung mindestens einen Thread brauchst auf Server Seite was schnell zu einem großem Overhead führen kann beim Thread Management (außer auf Linux, da ist das kein Problem). Die alternative ist NIO welches nicht blockt und deshalb besser skalieren kann (nicht muss).

Ich habe gehoft dass es eine Möglichkeit geben könnte direkt die Funktionen/Methoden anzusprechen ohne dass ich anhand der Daten entscheiden muss welche ich aufrufe ^^
Aber NIO werde ich mit mal anschauen :) Vielleicht vereinfacht das die Ganze Client/Server sache ^^
 

Nightmares

Aktives Mitglied
Wie gesagt "plain NIO" als wirklich auf NIO API level selber schreiben ist nicht ganz einfach. Frameworks wie Apache MINA oder ähnliches vereinfachen dieses etwas. Aber wenn du Methoden des Remotes aufrufen möchtest gibt es nur RMI oder ähnliches:
Jini
JNDI
Cajo (Vereinfachung des Gebrauchs von RMI)
SIMON (Alternative zu RMI) (Schneller!)
CORBA
 

Kr0e

Gesperrter Benutzer
Der GRundgedanke von RMI ist auf jeden Fall schon gut, auch wenn die Java - Impl. eben auf OneThreadPerClient aufbaut. RMI und NIO zu verbinden ist meiner Ansicht nach das Schlüsselelement. Sowas kann man auch recht einfach selbst machen und braucht dnan keine weiteren Abhängigkeiten zu thridparty Libs. Ich hab ebenfalls (Signatur) eine RMI Alternative auf Netty3 basierend geschrieben (New BSD License), bei Interesse einfahc mal in den Source schauen und ggf was eigenes implementieren oder eben die genannten Libs nutzen. Beim eigenen Impl. lernt man gleichzeitig noch was ;).

Ich werde übrigens in zukunft nicht mehr Netty verwenden, da ich finde, dass eine Abhängigkeit reicht und Netty nicht unbedingt von Nöten ist. Ganz im Gegenteil, dank Java 7 gibts nun endlich AIO wodruch NIO prima ersetzbar ist und man kein mega Framework braucht, denn AIO ist im Gegensatz zu NIO sehr einfach und intuitiv zu handhaben.

Gruß,

Chris
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Socket Server -> lesen von / schreiben zu php-script Netzwerkprogrammierung 6
B Versuch mit Socket etwas zu lesen und zu schreiben Netzwerkprogrammierung 15
G Socket Socket Kommunikation Netzwerkprogrammierung 1
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
D Socket-Verbindungen übers Internet Netzwerkprogrammierung 4
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
A TCP multiClientServer mit socket mittels ObjectOutputStream Netzwerkprogrammierung 12
A Socket-Anwendung (BufferedWriter/Reader liest nicht aktuellen Wert) Netzwerkprogrammierung 6
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
M Socket Socket lehnt Verbindung ab Netzwerkprogrammierung 3
x46 Connection reset by peer: socket write error Netzwerkprogrammierung 6
x46 Socket Files per Socket verschicken Netzwerkprogrammierung 1
platofan23 Probleme mit Socket bei Android Studio? Netzwerkprogrammierung 22
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
D new ObjectInputStream(socket.getInputStream()); Netzwerkprogrammierung 15
E Socket Frage Netzwerkprogrammierung 6
D ServerSocket - Socket Verbindungsart Netzwerkprogrammierung 3
T Frage bzgl. Socket-API Netzwerkprogrammierung 1
F TCP Socket auf Verbindungsabbruch prüfen Netzwerkprogrammierung 15
F Socket Verbindung mit Verschlüsselung und Authentifierzung Netzwerkprogrammierung 1
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
T Socket Socket connections schließen? Netzwerkprogrammierung 2
D Socket Socket OutputStream leeren? Netzwerkprogrammierung 3
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
F Socket Socket in anderen Methoden Netzwerkprogrammierung 1
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
I Socket Netzwerkprogrammierung 1
F Wiederverbinden nach socket Abbruch Netzwerkprogrammierung 1
J 1 Socket - 2 Serversocket Netzwerkprogrammierung 4
T Socket sendet erst nach socket.close() Netzwerkprogrammierung 2
F Socket Verbindungsaufbau abbrechen Netzwerkprogrammierung 3
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
Joew0815 socket event handler Netzwerkprogrammierung 2
F Einfache Socket Verbindung Netzwerkprogrammierung 2
A Socket Socket Receive-/SendBuffersize Netzwerkprogrammierung 0
D Socket server auf Smartphone Netzwerkprogrammierung 9
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
A Socket Socket Server netcat Netzwerkprogrammierung 1
Shams Anfängerfrage zu Server-Socket-Kommunikation Netzwerkprogrammierung 2
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
D Socket Error: java.lang.NullPointerException Netzwerkprogrammierung 1
D TCP Socket funktioniert nicht richtig Netzwerkprogrammierung 3
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
B SSL Socket Netzwerkprogrammierung 2
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
R Dauerhaft offene Socket-Verbindung? Netzwerkprogrammierung 3
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
P Warum kann ich kein Socket aufbauen? Netzwerkprogrammierung 12
S Socket SSL Socket und Sun/Oracle Java Netzwerkprogrammierung 5
S Socket Socket Verbindung wiederherstellen Netzwerkprogrammierung 16
precoc Server Socket Start / Stop Netzwerkprogrammierung 5
N SOCKET mehrere Requests, keep Alive serverspezifisch? Netzwerkprogrammierung 3
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
C Socket Systemsperren mit Socket Netzwerkprogrammierung 4
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
D Socket Multithread-Socket | Kurz vor dem Ziel Netzwerkprogrammierung 7
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Dynamische Socket-Thread Erzeugung Netzwerkprogrammierung 2
D Socket Socket absichtlich so schließen, dass Gegenseite java.net.SocketException: Connection reset wirft Netzwerkprogrammierung 4
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
S Socket-Frage zu einem LAN-Spiel. Netzwerkprogrammierung 3
A UDP verlorene Pakete/ socket.receive zu langsam Netzwerkprogrammierung 27
CookieSoft Socket Packet per Socket Netzwerkprogrammierung 8
CookieSoft Fehler bei Socket Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Per Socket auf POP3 zugreifen? Netzwerkprogrammierung 7
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
Z Socket Socket-Thread falsch? Netzwerkprogrammierung 5
Helgon Socket Socket IP Frage + Tutorial/Bücher Netzwerkprogrammierung 5
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T Socket String zu Socket Netzwerkprogrammierung 26
M Datenübertragung per Socket nur alle 200ms Netzwerkprogrammierung 4
C Socket Socket: Connection timed out Netzwerkprogrammierung 3
T Socket blockierter Socket Netzwerkprogrammierung 4
C Socket Probleme beim Lesen und Schreiben aus/in einen Socket Netzwerkprogrammierung 2
T Alternative Socket mit Verbindungsabbruch Erkennung Netzwerkprogrammierung 2
M Socket, Ende Dateitransfer Netzwerkprogrammierung 4
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
H Socket Socket listening Netzwerkprogrammierung 11
D Client Socket mit Eventlistener? Netzwerkprogrammierung 5
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
A Socket Netzwerkprogrammierung 18
N Socket geht auf Windows, aber auf Mac nicht ? Netzwerkprogrammierung 3
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2
M SSl Socket Server und openssl key Netzwerkprogrammierung 3
J Socket Socket Programmierung. Wie anfangen? Netzwerkprogrammierung 4
DEvent Keine IOException beim schreiben Socket Netzwerkprogrammierung 3
A Socket Server: Message an verschiedene Clients senden Netzwerkprogrammierung 4
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
Dit_ FTP Download | "PassiveMode"-Socket öffnen Netzwerkprogrammierung 4
A Socket Socket Verbindung unterbrochen --> keine Exception Netzwerkprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben