Design-Pattern: Client - Server

werde ich implementieren Sie eine client - server Anwendung in java. Client und server kommunizieren miteinander über TCP. Es gibt nur einen zentralen server, wer kümmert sich um alle Client-Nachrichten.

Ich nicht verwenden RMI für die Kommunikation, Sie kommunizieren mit tcp-sockets und client die Kommunikation mit einem anderen client über den server. Das bedeutet, dass der server leitet Nachrichten von client A zu client B.

Bin jetzt hier sitzen und versuchen, herauszufinden, wie zu entwerfen, die server-Anwendung.

Also den server listen für eingehende verbindungen die ganze Zeit. Das ist gut. Für jeden neuen client, der eine Verbindung zu dem server (dial-up), die server erstellen einen neuen Socket und ich würde Threads zu lassen, Sie arbeiten parallel.

Jeder Nutzer verwendet einen client, und jeder client muss authentifiziert mit Benutzername und Kennwort.

Bin auf der Suche nach einem design-pattern zu implementieren, die auf dem Server gespeichert/verarbeitet die Socket-Verbindung zu einem client.

Meine erste Idee war die Erstellung einer großen Singleton-Objekt aufgerufen, ClientManager, die enthält eine Karte. Also die Server nennen könnte, so etwas wie ClientManger.getSocketBy(username), um die Buchse des gewünschten Benutzer (Client).

Diese lösen könnte, die "Weiterleitung" von Nachrichten von Client A zu Client B.

Beispielsweise:
Benutzer A (Client A) möchte eine Nachricht senden, um Benutzer B (Client B). Also der server empfängt die Nachricht von Benutzer A (Client A) und rufen Sie Dank.getSocketBy(Benutzer B), um die socket-Kommunikation an die Benutzer B, und senden Sie dann die Nachricht über diese Buchse.

Aber das "design" auf der server-Seite scheint mir zu einfach, wie es sein könnte ein gutes design für so ein Ding, und im fehlt so etwas wie Events, Beobachter etc.

Andere Möglichkeit könnte sein, wirft man ein Ereignis auf den Thread, der behandelt die Benutzer-B-Buchse Anschluss instad der Aufruf der Steckdose.send () - Methode direkt.

Aber es muss einen besseren Weg geben ...

Ist es ein üblicher Weg, um etwas umzusetzen, wie dies ein design-Muster, die Sie empfehlen können? Im Wundern, wie ein instant-messanger-server wäre dies umzusetzen?

Übrigens: im nicht-Umsetzung einer instant-messanger und die Skalierbarkeit ist nicht das wichtigste, da es nicht die 1000 von clients gleichzeitig mit dem server kommunizieren. Ein sauberes software-design ist mehr wichtig für mich.

Im die Implementierung eines eigenen Protokolls (xml-basiert) für die Kommunikation. Gibt es eine Möglichkeit/design pattern, wie Sie wickeln Sie das Protokoll in ein Objekt oder ist es nichts, was ich tun könnte (aus dem Software-Architekten-Sicht) vorbehalten Zeichenfolge /xml-parsing?

InformationsquelleAutor sockeqwe | 2011-12-02
Schreibe einen Kommentar