Hallo,
ich habe einen Socket Server.
Nun koennen sich dort User einloggen.Nach einer gewissen inaktivität sollen sie rausfliegen,...
wuerdet ihr das auch mittels einer ArrayList machen? Welche eine Struct enthaelt und in dieser ist Username,IP,Timeout
und diese Liste laufend iterieren, und wenn man durchlaeuft und die aktuelle Zeit >Timeout dann rausloeschen. Wenn der nutzer was macht, dann die Timeout updaten,..
Unsere Website
iPhone Programmierung | Android Programmierung
Hallo Ploetzi,
wuerdet ihr das auch mittels einer ArrayList machen?
Mottenkiste, Mottenkiste, Mottenkiste, s. List<T> statt ArrayList?!
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Ich hätte da noch den Ansatz das für jeden User ein Thread erstellt wird, der in gewissen Abständen (=Timeout) nachsieht wie lang der letzte Zugriff schon her ist.
Wenn die Session vorbei ist wirft dieser ein Event. Dieses Event wird abgefangen und somit der User aus der Liste gelöscht.
Ist wie gesagt nur n Ansatz, kann nicht beurteilen inwieweit das von der Performace bzw. vom Design her gut bzw. schlecht ist.
wuerdet ihr das auch mittels einer ArrayList machen?
Ich würde ein Stack<T>
nehmen, aber das ist mehr so ein Bauchgefühl.
Hinrich
Hallo DaemNice,
Ich hätte da noch den Ansatz das für jeden User ein Thread erstellt wird, der in gewissen Abständen (=Timeout) nachsieht wie lang der letzte Zugriff schon her ist.
das ist gar keine gute Idee. Einen Thread zu erzeugen ist relativ teuer und kostet mindestens 1 MB Speicher. Wenn die Zahl der User groß ist, könnte die maximal erlaubte Anzahl oder der verfügbare Hauptspeicher gesprengt werden. Und dass, obwohl sich jeder einzelne Thread mehr als langweilen würde. Mal abgesehen davon, dass man sich vermutlich unnötigen Synchronisationsaufwand einhandelt.
Hallo hinrich,
aber das ist mehr so ein Bauchgefühl.
ein Bauchgefühl, das dich trügt, denn die User werden ja typischerweise gerade nicht nach dem LIFO-Prinzip inaktiv werden. Deshalb muss die verwendete Collection die Möglichkeit bieten, Elemente an beliebigen Stellen zu entfernen. Stack ist daher ungeeignet.
herbivore
Wie wäre es schlicht mit einem Dictionary<UserBlaBlubb, DateTime>?
Da stecken alle user drin und dann kannst du in intervallen oder beispielsweise vor irgendeiner anderen Aktion fragen wie lange die letzte Übertragung her ist. Bei jeder Aktion von einem Benutzer aktualisierst du den Timestamp.
Hallo jaensen,
grundsätzlich ist ein Dictionary eine schicke Sache, aber eine Liste von User-Objekten scheint mir hier doch passender.
herbivore
Einen Thread zu erzeugen ist relativ teuer und kostet mindestens 1 MB Speicher. Wenn die Zahl der User groß ist, könnte die maximal erlaubte Anzahl oder der verfügbare Hauptspeicher gesprengt werden.
Danke,
Hab gerade n kleines Program mit 2000 Threads gestarted und der Speicherverbrauch ist enorm.
Wiedermal was dazugelernt.
ok. cool, danke
Unsere Website
iPhone Programmierung | Android Programmierung