Swing ArrayList in jList

Status
Nicht offen für weitere Antworten.

Curan

Mitglied
Hallo!

Mal ein kleines Vorwort: Ich beschäftige mich erst seit ungefähr 3 Monaten mit Java und kenne mich daher noch nicht all zu gut aus, daher bitte nicht wütend werden wenn ich etwas langsamer unterwegs bin ;O

Folgendes Problem:
Ich versuche grad einen kleinen Java Chat Server sowie Client (genau DAS hat der Welt noch gefehlt :lol🙂 zu entwickeln.
Momentan speichere ich auf Server Seite meine User in einer statischen ArrayList ab (Nickname + Socket Objekt). Nun möchte ich aber beim Clienten die momentanen User anzeigen. Sprich ich hab in meiner ClientGUI eine jList die ich mit Daten befüllen möchte.

Jetzt weiß ich nur nicht: WIE genau?

Soll ich alle X Sekunden/Minuten die Nicknames (Server) in eine eigene ArrayList schreiben und das ArrayList Objekt an den Clienten schicken und dort in einer Schleife die jList befüllen lassen?

Ich könnte natürlich auch (was besser ist denke ich) meinem Client beim Login in einer Schleife alle Nicknames die sich momentan in der ArrayList befinden zuschicken und dann nur noch bei einem Login/Logoff mitteilen er soll einen bestimmten User hinzufügen/entfernen.

Aber genau bei diesem User hinzufügen/entfernen hänge ich nun. Wie soll er wissen wann ein User hinzugefügt und wann einer entfernt gehört. Mit einem eigenen Protokoll?
A la Switch auf die ersten 3 Symbole, falls es 999 ist gehört der User in der Liste entfernt, ansonsten hinzugefügt ?

Freue mich über Antworten.

lg Sam
 
Hallo Curan,

ich hab jetzt Deine Vorgehensweise nicht 100% verstanden, aber warum scheust du dich davor, bei Bedarf die ganze Nickname Liste an den client zu schicken?
Das sollte ja vom Trafic her auch nicht viel mehr sein, als halt irgend eine Message, die für einen der Teilnehmer verschickt werden muss.
Hätte auch den Vorteil, dass wenn mal so eine Nachricht 'verloren' geht, ist die Liste beim nächsten Login/Logout beim Client spätestens wieder synchron.
Ansonsten bliebe dir tatsächlich nur einen 'Marker' im Protokoll.

Gruss, hiti
 
HuHu!

Jap ist etwas schwer für mich zu erklären, aber ich versuchs:

Serversicht:
Client meldet sich an - Socket Objekt wird erstellt
Sobald sich der User mit einem Nickname anmeldet, wird ein Objekt erstellt, in dem der Nickname des Users sowie sein Socket Objekt gespeichert werden.
Dieses Objekt(Nickname + Socket) wird nun in einer ArrayListe abgespeichert.

Anschließend soll an den Client eine Liste geschickt werden, mit den Usern die sich momentan im Chat befinden. Jetzt hab ich eben die Wahl, WIE ich dem Client diese Liste mit den Nicknames zukommen lasse.

Wenn ich eine ArrayListe mit den Nicknames erstelle & verschicke, nun ja, das müsste ich bei jedem Login/Logout eines Benutzers im Chat machen, damit die Liste immer aktuell ist. Das würde doch auf dauer sehr viel traffic fressen?!

Jetzt habe ich mir gedacht, ich löse das ganze so:
Am Anfang bekommt der Client die Nicknames zugesendet und anschließend, wird dem Client nur noch mitgeteilt: Lösche UserXY aus der Liste, füge UserZ hinzu etc

Aber wenn es deiner Meinung nach nicht all zu viel traffic frisst dann löse ich das ganze natürlich mit dem versenden der ArrayList an sich. Wäre nett wenn du mir noch einen Tipp geben könntest in welchem Intervall?! Nur bei bestimmten Aktionen (Login/Logout eines Users) oder auch einfach so alle X Minuten.

lg Sam
 
Hallo Sam,

Aber wenn es deiner Meinung nach nicht all zu viel traffic frisst dann löse ich das ganze natürlich mit dem versenden der ArrayList an sich. Wäre nett wenn du mir noch einen Tipp geben könntest in welchem Intervall?! Nur bei bestimmten Aktionen (Login/Logout eines Users) oder auch einfach so alle X Minuten.

Wie gesagt übermittelst du ja auch jede Nachricht auf dem selben Wege. Und der Traffic für die Liste fällt ja nur an, wenn sich jemand neu einlogged oder auslogged. Auf keinen Fall in einem Intervall. Wozu?

Prinzipiell muss man sich bei solchen Performance-Themen immer die Frage des Aufwands/Nutzen stellen.
Es ist sicherlich recht einfach die Liste beim Login/out zu versenden. Wenn es aber in der Praxis tatsächlich Probleme macht lässt sich das immernoch mit einem komplizierteren Vorgehen optimieren.
Wozu zuerst eine komplizierte Methode implementieren um ein evtl. Problem zu umgehen, wenn es später gar kein Problem zu umgehen gibt 😉

Gruss, hiti
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben