Client-Server Kommunikation, suche Framework (z.B. MoM)

DarthShader

Erfahrenes Mitglied
Hallo,

ich bin auf der suche nach einer einfachen Möglichkeit, einen Client und einen Server übers Netzwerk (IP) zu verbinden. Entweder es ist eine Message orientated Middleware (MOM), oder ein anderes Framework, das diese Kommunikation erleichtert.

Ich könnte natürlich auch eine eigene Kommunikation programmieren, z.B. via Sockets. Allerdings bevorzuge ich da eher ein Framework, das mir diese Arbeit abnimmt. Ich kenne natürlich den JMS (Java Message Service) der z.B. im Kontext eines Application Servers wie JBoss implementiert ist, allerdings habe ich auf der Serverseite keinen richtigen Application Server.

Gibt es sowas vielleicht auch in Spring bzw. bietet Spring eine API an, um Netzwerkkommunikation zu erleichtern?

So eine Kommunikation läuft ja oft auf dieselbe Art und Weise ab - also Verbindungsaufbau, Authentifizierung, dann der Austausch der Daten (Anfrage, Antworte, Anfrage, Antwort...), Verbindungsabbau. Ich suche eben etwas, wo ich solch ein "Protokoll" definieren kann, also wer was als Antwort schickt, wenn es das überhaupt gibt.

Mir wäre wichtig, dass es leichtgewichtig ist, sodass keine großen Abhängigkeiten bestehen oder das Deployment unnötig kompliziert wird.


Über Eure Hilfe würde ich mich sehr freuen


Vielen Dank!
 
Ich glaub du wirfst da zwei Sachen durcheinander. Protokolle schreiben und einfache Client Server Kommunikation. Also was ist genau der Fokus?

Mit den gängigen Remotingtechnologien hast du ja bereits ein Protokoll auf dem du aufsetzen kannst. Spring bietet da breite unterstützung:

http://static.springframework.org/spring/docs/2.5.x/reference/remoting.html
http://static.springframework.org/spring/docs/2.5.x/reference/spring-integration.html

Was man jetzt auswählt hängt vor allem von den Anforderungen ab. Ein Nobrainer ist zum Beispiel der Einsatz von RMI. Mit Spring sind das 5 Zeilen XML auf Client bzw. Serverseite und es läuft. Allerdings ist man mit RMI auch schnell Grenzen ausgesetzt: geschlossene Ports, keine Asynchronität usw. Dann schielt man ggf. auf WebServices bzw. JMS.

Gruß
Ollie
 
Ich glaub du wirfst da zwei Sachen durcheinander. Protokolle schreiben und einfache Client Server Kommunikation. Also was ist genau der Fokus?

Ja, Du hast Recht. Aber im Prinzip sind mir beide Tehmen wichtig. Zum einen die grundlegende Technologie für die Übertragung, wobei ich nicht RMI verwenden möchte, ich möchte definitiv eine lose Kopplung der Systeme durch asynchrone Kommunikation erreichen. Zum anderen würde ich gerne etwas haben, womit ich solch ein Protokoll definieren kann.

Für letzteres habe ich mir schon überlegt, eine generische Zustandsmaschine zu erstellen. Für diese könnte ich dann via XML einen Zustandsgraphen definieren, der genau das Protokoll, also den Ablauf der Kommunikation (wer schickt was als Antwort auf was) festlegt. Gibt es denn in diesem Bereich schon etwas? Ich möchte das Rad natürlich nicht neu erfinden.

Mit den gängigen Remotingtechnologien hast du ja bereits ein Protokoll auf dem du aufsetzen kannst. Spring bietet da breite unterstützung:

http://static.springframework.org/spring/docs/2.5.x/reference/remoting.html
http://static.springframework.org/spring/docs/2.5.x/reference/spring-integration.html

Was man jetzt auswählt hängt vor allem von den Anforderungen ab. Ein Nobrainer ist zum Beispiel der Einsatz von RMI. Mit Spring sind das 5 Zeilen XML auf Client bzw. Serverseite und es läuft. Allerdings ist man mit RMI auch schnell Grenzen ausgesetzt: geschlossene Ports, keine Asynchronität usw. Dann schielt man ggf. auf WebServices bzw. JMS.

Ich habe mir die Spring Dokumentation zu dem Thema (Deine Links oben) durchgelesen. Spring scheint man ja auch mit JMS, z.B. das von Thomas erwähnte ActiveMQ, verwenden zu können. Das käme für mich in Frage, denke ich.


schau dir doch mal ActiveMQ an:
http://activemq.apache.org/
Das ist ein JMS fähiger Message Broker den du auch ohne einen Application Server betreiben und in einer eigenen Server Applikation hosten kannst.


Vielen Dank, ActiveMQ sieht sehr gut aus.


Ich habe momentan das Problem, eine solche Kommunikation aufbauen zu müssen, dies aber noch nicht mit Frameworks getan zu haben. Natürlich könnte ich jetzt einfach über Java Sockets meine eigene Übertragung anfangen, ganz typisch und sehr einfach, ich würde es jedoch gerne etwas profesioneller machen.

Die Clientseite serialisiert bei mir momentan das Domain Model, welches später auch übertragen werden muss, als XML (Text) Daten. Diesen XML Text möchte ich verschicken und auf der anderen Seite wieder deserialisieren um es dann via Hibernate in eine Datenbank zu schreiben. Das ist sicher ein typischer Use-Case. Ich serialisiere mein Domain Model mit dem "Simple" XML Framework (http://simple.sf.net/) (seht Ihr da ein Problem? Denn mein Domain Model implementiert nicht serializeable, also auch nicht für RMI geeignet).

Ein paar offene Fragen hätte ich da noch:

  • Wie sieht es mit dem schon oben genannten Kommunikationsprotokoll aus, gibt es da schon ein Framework, mit dem ich die Anfragen-Antworten Reihenfolgen definieren kann?
  • Wie sieht es bei Spring mit JMS und ActiceMQ mit Sicherheit aus, kann ich da eine SSL Verbindung (wie z.B. mit dem Java SSLSocket)
  • Wie steht es um Sicherheit, kann man eine Authentifizierung einbauen, also einfach Benutzer+Kennwort, oder obliegt das in der Verantwortung des Programmierers?
  • Würdet Ihr sagen, dass Spring mit JMS und auf dem Server ActiceMQ eine gute Idee ist, das umzusetzen?


Vielen Dank für Eure Hilfe!
 

Neue Beiträge

Zurück