# Welches Protokoll für RMI verwenden?



## pc-world (2. Jun 2008)

Ich weiß, dass ich die Ports 1098 und 1099 freischalten muss.

Doch mit welchem Protokoll?

Mein Router bietet folgende an:


----------



## ARadauer (2. Jun 2008)

ich würd auf tcp setzen


----------



## Guest (2. Jun 2008)

ARadauer hat gesagt.:
			
		

> ich würd auf tcp setzen



Danke, probier ich mal aus.


----------



## Guest (2. Jun 2008)

Müssen beim Client auch Ports freigeschaltet sein?


----------



## tuxedo (2. Jun 2008)

Wenn du Callbacks benutzt: Ja. Aber welche Ports das dann sind kann ich dir nicht sagen. Wenn ich mich nicht irre, werden die sogar AdHoc ausgemacht. Aber ich glaube ich irre mich da diesesmal ;-)

Bei der Verwendung von Callbacks hast du, so hab ich die Erfahrung gemacht, recht schlechte Karten wenn der Client auch hinter einem Router sitzt. Es gibt da diverse Umwege die nicht wirklich toll sind. Das hat mich dazu veranlasst "SIMON" (siehe Signatur) zu entwickeln.

- Alex


----------



## pc-world (2. Jun 2008)

alex0801 hat gesagt.:
			
		

> Bei der Verwendung von Callbacks hast du, so hab ich die Erfahrung gemacht, recht schlechte Karten wenn der Client auch hinter einem Router sitzt. Es gibt da diverse Umwege die nicht wirklich toll sind.


Das ist es ja, wer hat heutzutage noch ein Modem...

Mit Callbacks meinst du _return_s, oder?


Ich habe gelesen, dass man RMI auch über HTTP "tunneln" kann, um die ganze Firewall- und Routergeschichte zu umgehen. Kennt jemand einen guten Link dazu (beim googeln bin ich da auf keine gute Ergebnisse gestoßen...)?
Braucht man dafür einen Webserver?


----------



## tuxedo (2. Jun 2008)

Ähm, du bist doch auch mit DSL online, oder? Dann gehörst du auch zu denen die ein Modem benutzen. 

Das was ich meinte war vielmehr: Wer keinen Router benutzt und mit seinem (DSL-)Modem direkt am Internet hängt, der hat keine Callback-Schwierigkeiten.

Callbacks haben nix mit Return-Werten zu tun. Ein Callback ist, bezogen auf RMI und Co., wenn der Server ein Client-Objekt hat und von sich aus, anhand seiner Serverlogik, Methoden beim Client aufrufen kann, ohne dass der Client zuvor explizit diesen Aufruf ausgelöst hat. Eben das gleiche was der Client beim Server machen kann. Nur eben in umgekehrter Richtung. Ohen Callbacks muss der Client, wenn er wissen will ob sich irgendwas irgendwo geändert hat, immer beim Server nachfragen "gibts schon was neues"? Mit Callbacks kann sich der Server selbstständig beim Client melden "du, hier gibt's was neues".

Der Grund, warum du bei google auf keine guten Ergebnisse stöst, war auch der gleiche Grund, warum ich geschrienen hatte 



> Es gibt da diverse Umwege die nicht wirklich toll sind. Das hat mich dazu veranlasst "SIMON" (siehe Signatur) zu entwickeln.



- Alex


----------



## Angel4585 (2. Jun 2008)

Japp, also ich kann SIMON nur empfehlen


----------



## pc-world (7. Jun 2008)

Werde mal nach SIMON schau'n (doch ich finde nichts in Google, und in der Signatur ist nur ein Link zur GPL).
Geht SIMON auch so einfach wie RMI?

Und noch eine Frage zur Portumgehung:
Könnte ich RMI nicht auf einem Port laufen lassen, der bei einem Router bzw. ein Firewall standardmäßig freigeschaltet ist, wie z. B. für POP3? Oder _könnte_ ich da andere Programme durcheinander bringen?


----------



## pc-world (7. Jun 2008)

Ah, habe einen Link entdeckt: https://simon.dev.java.net/

Welches muss ich beim Download downloaden (https://simon.dev.java.net/servlets/ProjectDocumentList)?


----------



## tuxedo (7. Jun 2008)

Prinzipiell funktionieren beide.

* SIMON alpha build200803251514 rev51
Das ist meine erste Implementierung, basierend auf "normalen" Sockets". Funktioniert soweit recht gut.

* SIMON NIO-Branch alpha build200805021040 rev106
Da arbeite ich gerade dran. Allerdings ist da die Version im Subversion mittlerweile schon neuer, stabiler und weniger fehlerbehaftet.
Vorteil der NIO-Branch Version: SIMON kommt nun potentiell mit über 1000 Clients klar (wo RMI aufgrund der veralteten "normalen" Socketkommunikation irgendwann in Threads erstickt) und verbraucht insgesamt weniger Ressourcen. Dafür ist es nur etwas langsamer. Aber das dürfte dem "normalen" Benutzer gar nicht auffallen. 

Schlage vor du testest erstmal die erste File. Wenn du damit zurecht kommst, kannst du immernoch auf die NIO-Version umsteigen (ist soweit 1:1 kompatibel)

- Alex


----------

