Programmierung einer Chatanwendung

  • Ersteller Ersteller Dexter1997
  • Erstellt am Erstellt am
D

Dexter1997

Gast
Hallo Freunde der Sonne!

Ich möchte eine einfache Chatanwendung programmieren, um in die Netzwerkprogrammierung einzusteigen. Verwendet wird die Programmiersprache Java. Ich habe mir dazu folgendes Konzept überlegt:

Es gibt den Vermittler, also den Server, und die Clients.

Ein "Vermittler", wie ich ihn nenne und der der eigentliche Server ist, ist ein eigenständiges Programm, der Clients mitteilen kann, welche Clients mit ihm verbunden sind und die Anfrage eines Clients, mit einem anderen Client zu chatten, verarbeiten und die Kommunikation gewährleisten kann.

Der Client ist das Programm für den Benutzer, der mit den Serverteilnehmern chatten möchte. Der Client kann sich mit dem Server verbinden, den Server fragen, welche Kommunikationspartner zur Verfügung stehen, Nachrichten an den Server senden, wobei sich der Server um die Weiterleitung der Nachricht zum entsprechenden Client kümmert und die vom Server weitergeleiteten Nachrichten des verbundenen Chatpartners empfangen und darstellen kann.

Nun zu meinen Fragen:

1. Ist dies eine sinnvolle Struktur?
2. Bei einem simplen Program, dass eine Nachricht an einen Server schickt, der diese Nachricht einfach nur darstellen soll, ist das Problem aufgetreten, dass die Nachricht nicht vom Server empfangen wurde, sofern sich der Server irgendwo im Internet befand. Mir wurde gesagt, dass das Problem was mit dem Thema "Port-Forwarding" zutun hat. Ich habe das Gefühl, dass bei meiner Struktur dasselbe Problem wieder auftreten wird. Wie umgehe ich dieses Problem? Muss ich meine Struktur dafür grundlegend verändern?

Ich danke für alle Antworten!
 
Ich sehe prinzipiell jetzt erstmal keine großen Probleme.

Port-Forwarding ist eigentlich immer dann ein Problem, wenn man einen Server in seinem eigenen Heimnetz betreibt und diesen Server dann aus dem öffentliche Internet erreichen möchte. Das liegt daran, dass jeder Internetzugang EINE öffentliche IP hat. Mit dieser IP kann man den Router des Heimnetzes erreichen, welcher Rechner im Netz die Daten erhalten soll kann über Port-Forwarding definiert werden. So wir dann z.B. konfiguriert das alle Anfragen die der Router auf Port 8000 bekommt an den Rechner 192.168.0.1 weitergeleitet werden.
 
Ist das nicht eh die Grundstruktur eines jeden nicht P2P Chat Programms (Ohne die DB für Offline-Nachrichten)?
 
Server Client ist wohl das gängigste. Setzte am besten auf REST auf dann bewegst du dich als LernProjekt schonmal ganz gut.
 
Hooo schrieb:
Ich sehe prinzipiell jetzt erstmal keine großen Probleme.

Port-Forwarding ist eigentlich immer dann ein Problem, wenn man einen Server in seinem eigenen Heimnetz betreibt und diesen Server dann aus dem öffentliche Internet erreichen möchte. Das liegt daran, dass jeder Internetzugang EINE öffentliche IP hat. Mit dieser IP kann man den Router des Heimnetzes erreichen, welcher Rechner im Netz die Daten erhalten soll kann über Port-Forwarding definiert werden. So wir dann z.B. konfiguriert das alle Anfragen die der Router auf Port 8000 bekommt an den Rechner 192.168.0.1 weitergeleitet werden.

Und wenn der Server nun eine Nachricht an einen Client sendet? Ist das nicht hier dasselbe Problem? Das heißt ja, das jeder, der mein Programm benutzt, Port-Forwarding aktiviert haben muss.
 
REST mit Polling wäre wohl der einfachste Ansatz. Also der Client fragt alle X Sekunden nach neuen Nachrichten. Bedeutet natürlich, dass die Nachrichten im Extremfall um X Sekunden verzögert ankommen.

Dann gibt's noch die Möglichkeit Long Polling oder SSE (Server Sent Events) zu benutzen. Das ist schon etwas schwieriger umzusetzen, aber dafür kommen die Nachrichten dann auch pünktlich an.

Und zu guter Letzt gibt's dann noch WebSockets (wahlweise auch mit dem STOMP Protokoll, falls man mehrer Chaträume und so ohne großen Aufwand umsetzen will). WebSockets unterscheiden sich natürlich grundsätzlich von REST, aber im Vergleich zu REST + Long Polling / SSE hat man den Vorteil, dass man sowohl für Senden als auch Empfangen nur 1 Technologie verwenden muss.

Ich würde WebSockets nehmen, weil es sehr einfach umzusetzen ist, sobald man den Server eingerichtet hat.
 
Zurück
Oben