# Übersicht client/server implementationen und Frameworks (mithilfe gesucht!)



## mabuhay (29. Jun 2011)

Hallo zusammen

Ich bin schon länger auf der Suche nach einem Client/Server Framework. Ich habe dann mal angefangen, ein eigenes Framework zu bauen welches aber nach einem ähnlichen Schema wie Netty herausgekommen ist (was mir, nach einiger Einarbeitungszeit und nach einigen Änderungen des Framework-Aufbaus, aufgefallen ist). Nun versuche ich mir einen Überblick zu verschaffen, was es alles so gibt, und ob es sich lohnt mein Framework weiter zu entwickeln. Dabei bin ich auf eure Hilfe angewiesen, auch da ich eher neu im Client/Server Bereich bin und nicht alle wichtigen Vor-/Nachteile kenne. Bitte listet die Frameworks auf die Ihr kennt, mit einer Kurzen Beschreibung mit Vorteilen, Nachteilen, Erfahrung, Link zu guten Beispielen etc. Ich fange mal an mit den Frameworks die ich kenne oder bis jetzt gefunden habe. Natürlich ist dabei nicht alles komplett, evtl. gibt es für euch noch weitere Vor-/Nachteile dazu oder Korrekturen zu meinen Angaben.

*Mein Framework:*
_Event-Basiert:_ Dem Server/Client werden Handler-Objekte übergeben, welche die in den Handler-Interfaces definierten Methoden beinhalten (conntected, disconnected, receivedData, lostConnection, ...)
_Erweiterbar:_ Eingehende und Ausgehende Daten laufen über einen Incoming-/OutgoingProcessor. Also ein Objekt, welches read/write auf/vom Stream implementiert. Eine Factory-Klasse eines solchen Processors kann dem Client/Server übergeben werden, mit der Implementation eines eigenen Protokolles.
_Vorteil:_ Einfache Implementierung neuer Protokolle
_Nachteil:_ Funktioniert, aber noch am Anfang der Entwicklung (ich hätte noch viele Ideen...)

*Netty:* (Netty - the Java NIO Client Server Socket Framework - JBoss Community)
Asynchron, Event-Basiert, NIO, Blocking/Non-Blocking, single or multiple Thread (SEDA), SSL/TLS, dependencies: JDK >1.5
Vorfahre von Apache MINA
_Vorteil:_ Wenig (keine, ausser JDK 1.5) Abhängigkeiten, gute Dokumentation mit Beispielen
_Nachteil:_ ?

*XNIO:* (XNIO - JBoss Community)
Low-Level I/O layer, blocking/non-blocking, Basis für High-Level Implementationen
_Vorteil:_ ?
_Nachteil:_ ?

*Apache MINA:* (Apache MINA - Welcome to Apache MINA Project!)
Event-Basiert, Asynchron, TCP/IP, UDP/IP, RS232 via RXTX, eigene Protokoll-Implementationen können verwendet werden, low-level (ByteBufffer) und high-level (eigene codecs), single Thread/multiple Thread (SEDA), SSL/TLS/startTLS
Weiterentwicklung von Netty (so wie ich das hier verstehe)
_Vorteil:_ ?
_Nachteil:_ ?

*Net4j:* (Net4j - Eclipsepedia)
Asynchron, non-blocking, TCP/HTTP/in-memory, eigene Protokolle können verwendet werden, basiert auf OSGi
_Vorteil:_ ?
_Nachteil:_ Praktisch keine Dokumentation

*QuickServer:* (.:: QuickServer ::. Java library for creating robust, multi-threaded, multi-client TCP servers)
Multi-Client, TCP/IP, SSL/TLS, blocking/non-blocking
_Vorteil:_ ?
_Nachteil:_ nicht mehr weiterentwickelt? (letzte Aktualisierung März 2006)



das wars dann mal bis jetzt von meiner Seite, bin gespannt was noch kommt.

mfg


----------



## Kr0e (29. Jun 2011)

Grizzly, xSockets .... Das sind auch noch gute Ansätze

Zu Grizzly kann ich nichts sagen, aber zu xSockets:

Vorteile: Geniales Multiplex-Pipeline System, wodurch quasi virtuelle Verbindungen über eine physikalische emuliert werden.
Nachteile: Hier und da etwas buggy^^ Von der Geschwindigkeit her recht flott aber nicht vergleichbar mit Netty3/Mina, da die Threading-Modell-Einstellungen nicht so gut sind.


----------



## mabuhay (29. Jun 2011)

Kr0e hat gesagt.:


> Grizzly, xSockets .... Das sind auch noch gute Ansätze



Hmm, hast du noch ein paar weiter Informationen oder Erfahrung damit? (die grizzly-Webseite ist gerade down, auch java.net)


----------



## Kr0e (29. Jun 2011)

Merkwürdig, Mina ist kein Nachfolger von Netty, eher umgekehrt, wobei man auch dabei streiten könnte. Mina1 & Netty3 wurden beide vom selben Entwickler erstellt. Aber ist ja eigentlcih nicht so wichtig...


Über Netty3 kann ich nur sagen, dass es ein verdammt gutes Framework ist und trotz der etwas mageren "Austattung" dennoch empfehlenswert ist, gerade was Leistung angeht.


----------



## mabuhay (30. Jun 2011)

Netty hat mir soweit auch sehr gut gefallen, vor allem die Doku. was ist dann deiner Meinung nach mager daran? hast du schon mal was vermisst?


----------



## Kr0e (1. Jul 2011)

Mit mager mein ich, dass relativ wenig ChannelHandler von Haus aus dabei sind... Mina z.B. hat IoFilter wie RequestResponseFilter. Das ist praktisches Tool, klar man kanns selber machen ... Aber es gibt noch weitere Sachen... Netty hat aber auch echt tolle Sachen, wie z.B. den ChunkedWriteHandler. Ich finde einfach, dass hier und da ein paar Standard-Handler noch fehlen. Z.b. ein TransferThrottlingHandler oder ein IP-Blacklist-Handler... Solche Sachen eben..


----------



## mabuhay (5. Feb 2012)

Hier noch eine interessante Diskussion: java - Netty vs Apache MINA - Stack Overflow


----------

