Laden...

Passende Collection, um inaktive User zu ermitteln

Erstellt von Ploetzi vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.203 Views
Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren
Passende Collection, um inaktive User zu ermitteln

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,..

1.002 Beiträge seit 2007
vor 14 Jahren

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

D
67 Beiträge seit 2009
vor 14 Jahren

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.

H
116 Beiträge seit 2008
vor 14 Jahren

wuerdet ihr das auch mittels einer ArrayList machen?

Ich würde ein Stack<T> nehmen, aber das ist mehr so ein Bauchgefühl.

Hinrich

49.485 Beiträge seit 2005
vor 14 Jahren

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

2.760 Beiträge seit 2006
vor 14 Jahren

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.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo jaensen,

grundsätzlich ist ein Dictionary eine schicke Sache, aber eine Liste von User-Objekten scheint mir hier doch passender.

herbivore

D
67 Beiträge seit 2009
vor 14 Jahren

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.

Ploetzi Themenstarter:in
313 Beiträge seit 2006
vor 14 Jahren

ok. cool, danke