# java asynchrone kommunikation



## Guest (14. Jan 2008)

wenn ich java programme haben, die miteinander kommunzieren sollen.
zb einen spielserver und dazugehörige clienten
wie kann ich da am besten eine asynchrone kommunikation realisieren.
hab schon an rmi gedacht, aber da ist es ja so, dass ich auch wieder nur eine frage und antwort prozdur an den server stellen kann. oder kann der server auch direkt methoden auf den clienten aufrufen?

an sockets habe ich auch schon gedacht, aber gibts da nichts einfacheres?


----------



## Niki (14. Jan 2008)

bei rmi kann der server auch dem client etwas schicken, das funktioniert über callback:
der client holt sich vom server das remote objekt und gibt ihm gleichzeitig ein remote objekt von sich selber mit, auf diesem objekt kann der server methoden auf dem client aufrufen.
wenn du sockets verwenden willst brauchst du wahrscheinlich einen thread, welcher nur für das lesen zuständig ist


----------



## Gast (14. Jan 2008)

danke niki, werd ich gleich mal ausprobieren.

man hört immer das rmi langsam sein soll. kann mir das wer bestätigen oder was bedeutet langsam? einen setString("Test") Aufruf übers Internet, wie lange dauert sowas ungefähr?

welche technologien gäbe es sonst noch ausser rmi und threads?
webservices? oder ist das sowieso synchron?

danke für die hilfe


----------



## Niki (14. Jan 2008)

Naja, WebServices sind zwar synchron, man kann sie aber auch asynchron programmieren, indem man einfach eine Methode für den Request und eine Methode für den Response aufruft. Die Response Methode kann dann in einem eigenen Thread aufgerufen werden. Natürlich müssen Request und Response Methode irgendwie verbunden werden (über generierte ID zum Beispiel, die beim request zurück gegeben wird und beim Response mitübergeben wird)
Ich habe bis jetzt nicht die Erfahrung gemacht dass rmi langsam wäre. WebServices sind glaub ich langsamer, zumindest bei großen Datenmengen, da die Objekte ja als xml serialisiert/deserialisiert werden müssen.
Wenn die Kommunikation nicht sehr aufwendig ist würde ich dir Sockets empfehlen, ansonsten rmi.


----------



## tfa (14. Jan 2008)

Sockets sind wesentliche einfacher als RMI, besonders wenn man es asynchron haben möchte.


----------



## tuxedo (14. Jan 2008)

Gast hat gesagt.:
			
		

> man hört immer das rmi langsam sein soll. kann mir das wer bestätigen oder was bedeutet langsam? einen setString("Test") Aufruf übers Internet, wie lange dauert sowas ungefähr?



Naja, ich würde RMI nicht als langsam bezeichnen:





Die Geschwindigkeit eines Aufrufs hängt IMHO vor allem von der Latenz zwischen Client und Server ab. Je nach größe der Anfrage (RMI serialisiert den Methodenaufruf...) variiert die Zeit die für's Aufrufen und Zurückliefern des Ergebnisses notwendig ist. Denke meine Grafik veranschaulicht das recht gut.

Wenn du wirklich viele Clients gleichzeitig bedienen willst und das Protokoll selbst bestimmen willst, dann nimm "Java Native IO". 
Ansonsten halt Sockets, RMI oder was eigenes auf der Basis (Mein SIMON ha ich noch nicht released). 

- Alex


----------



## ARadauer (14. Jan 2008)

mit RMI habe ich, trotz der Meinungen meiner Kollegen, immer gute Ergebnisse erziehlt. 

was haltet ihr generell von CORBA? In wie weit ist das mit RMI zuvergleichen und wer hat schon mal damit gearbeitet?


----------



## tuxedo (14. Jan 2008)

Hab ich auch noch nie benutzt. Dennoch assoziiere ich CORBA immer mit einer "Old-School-Technik". Bin mit RMI bis jetzt, abgesehen von der leidigen Callbacksache, immer recht gut gefahren.

- Alex


----------



## Niki (14. Jan 2008)

Corba ist ja eher dafür gedacht mit fremden System zu kommunizieren die nicht umbedingt in Java implementiert sind. Da es mitlerweile WebServices gibt ist corba für mich eigentlich kein Thema mehr (habe aber auch noch nie damit gearbeitet)


----------

