Laden...

getimte callbacks / events ?

Erstellt von gronkzor vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.657 Views
G
gronkzor Themenstarter:in
6 Beiträge seit 2006
vor 17 Jahren
getimte callbacks / events ?

hallo,
ich möchte eine asp.net 2.0 applikation (browsergame zum lernzweck) erstellen, die u.a. folgende funktion bietet:

ein benutzer kann eine aktionen durchführen, die jeweils ein gewisse zeit dauert, bis sie abgeschlossen ist, z.b. gebäude bauen / dauer 2 stunden.

prinzipiell sollen alle daten in einer sql datenbank persistiert werden - das ist kein problem - also eintrag in event table mit startzeit und dauer.
aber was mache ich nun nach den 2 stunden? wie kann meine applikation auf so ein ereignis reagieren (user muss natürlich nicht mehr online sein).

meine 1. idee war, im glolabl.asax einfach eine art eventmanagement zu installieren, und die app überprüft dann z.b. jede sekunde ob zu diesem zeitpunkt ein ereignis stattfinden sollte, und führt dann die entsprechenden methoden aus etc.
das ist dann aber im prinzip polling - sehr lame denke ich mal. gibt es ein eingebautes scheduling / callback etc. das ich für sowas verwenden könnte? oder baut man so etwas sogar in die datenbank ein?

meine 2. idee war, viele timer zu generieren, die dann jeweils nach ablauf die aktion durchführen. das kommt mir aber auch komisch vor, denn was passiert wenn z.b. der server kurz ausfällt, dann habe ich zwar die persistierten db daten, aber muss wieder alle timer erstellen usw...

naja das ganze klingt mir zu sehr nach noob pfusch, daher hoffe ich, dass mir jemand weiterhelfen kann 🙂
mfg Gronkzor

W
799 Beiträge seit 2004
vor 17 Jahren

Das ist imho nicht mehr Aufgabe von ASP.NET - hier würde sich ein Windows-Dienst oder aber zumindest ein per Windows-Scheduler aufgerufenes Konsolen-Tool anbieten, was dann alle paar Minuten oder Sekunden "nachschaut". Das setzt natürlich voraus, dass du Zugriff auf den Server oder einen netten Admin hast, der dir das einrichtet.

G
gronkzor Themenstarter:in
6 Beiträge seit 2006
vor 17 Jahren

hm danke, aber genau das "jede sekunde nachschauen" wollte ich vermeiden - egal ob per externem tool oder aus asp.net heraus

W
799 Beiträge seit 2004
vor 17 Jahren

Wie soll es denn anders funktionieren? Irgendwo muss ja der Anstoß herkommen "mach jetzt was".

G
gronkzor Themenstarter:in
6 Beiträge seit 2006
vor 17 Jahren

naja das wollte ich eigentlich wissen 🙂
wenn ich nichts neues herausfinde, werde ich es so machen:
jedes event trägt sich in eine sortierte liste ein, die in global.asax definiert wird. dann wird genau ein timer erstellt, der bis zum frühesten event wartet, und dann die aktion durch führt. dann wird wieder ein neuer timer auf das nächste element erstellt usw.
damit muss ich nicht mehr pollen und habe trotzdem nur einen einzigen timer.
erspart mir busy waiting und polling... wenns klappt 🙂
zusätzlich werden die events auch in einen db table geschrieben, aus dem beim start der applikation die liste neu erstellt wird (für den fall eines absturzes / ausfalls des servers).
mfg Gronk

W
799 Beiträge seit 2004
vor 17 Jahren

In der Theorie liest sich das gut, praktisch wird das aber bei einer hochfrquentierten Anwendung Probleme in der Performance mit sich bringen, weil du CPU-Zeit und Speicher klaust, was eigentlich nicht nötig wäre, wenn sich ein eigener Dienst darum kümmern würde.

G
gronkzor Themenstarter:in
6 Beiträge seit 2006
vor 17 Jahren

hm ja um die performance habe ich mir auch schon gedanken gemacht, aber wieso soll das mehr verbrauchen als ein dienst der jede sekunde aufgerufen wird? gibts da einen trick?

W
799 Beiträge seit 2004
vor 17 Jahren

Mehr verbrauchen vielleicht nicht, aber es blockiert und lähmt den ASP.NET-Workerprocess. Wenn du das von einem anderen Prozess erledigen lässt, ist die Balance wahrscheinlich besser.

Der Trick ist für mich der Griff zum Windows-Dienst 😉

G
gronkzor Themenstarter:in
6 Beiträge seit 2006
vor 17 Jahren

hm.. dann mache ich am besten einen eigenen dienst, der die liste mit events verwaltet und dann timer generiert 🙂 das ist dann quasi die kombination, und das elende polling bleibt aussen vor.
äh... wie macht man einen dienst? gg gibts ein tutorial?

W
799 Beiträge seit 2004
vor 17 Jahren

Da müsstest du hier mal das Forum wechseln. Viel Erfolg 😉

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
zum Ertsellen von Diensten:
Windows Services mit C#

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
zum Ertsellen von Diensten:
Windows Services mit C#

edit: sry für doppelpost

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

G
gronkzor Themenstarter:in
6 Beiträge seit 2006
vor 17 Jahren

hi, thx!