![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 05.07.2004
Beiträge: 1
|
Hi, ich programmiere gerade ein Online-Browsergame und bei dieser Art von "Web-Anwendungen" benötigt man auch "zeitabhängige Aktion". Was versteh ich unter einer zeitabhängigen Aktion? Wenn ich z.B. ein Gebäude baue, es 2h zur Fertigung braucht und ich genau nach diesen 2h per Message über die Fertigstellung informiert werden möchte. Das Problem ist nicht anzuzeigen, dass das Gebäude fertig gestellt wurde sondern dass genau nach diesen 2h eine Funktion aufgerufen wird, die eine Message verschickt. Eine Lösung, die mir bisher eingefallen ist, belastet den Server glaub enorm, wenn mehrere User spielen (bei 5-10 also eher noch nicht spürbar Diese Lösung sieht folgender maßen aus: mit dem Klick auf "Bauen des Gebäudes blabla" wird ein Thread gestartet, der dann nach 2h aktiv wird, die Message verschickt und somit zu Ende ist. Jedoch wird dann für jeden User ein eigener Thread gestartet und dann ist das gleich mal eine Unmenge an parallel laufenden Threads. Hab selbst natürlich keine Erfahrungen, wie performant das letztendlich ist, aber vielleicht gibts ja bessere Lösungen. Eine Lösung, die ich noch bei anderen Browsergames gesehen habe ist die "Tick"-Lösung, welche mir persönlich nicht soo gut gefällt. Da wird ein Timer (oder Thread) gestartet, der sich alle 5min. aktiviert und dann checkt, ob was zu erledigen ist. In dem hier verwendeten Beispiel also, ob ein Gebäude fertig geworden ist und ob die Message noch an den User gesendet werden muss. Vorteil ist, dass nur ein nebenläufiges Programm aktiv ist. Nachteil ist, dass es unter Umständen 5 Minuten zu lange dauern kann, bis der User informiert wird. Kann sehr nervend für den User sein. Was mir auch so irgendwie im Kopf rumschwebt ist eine Mischung aus beiden Ideen. Also Quasi ein nebenläufiges Programm starten und wenn nun ein Gebäude gebaut wird, wird dem Programm mitgeteilt, dass es in 2h eine Message verschicken soll. Das Programm speichert die Informationen von allen Usern intern ab. Immer wenn eine neue Aktion hinzugefügt wird, wird die Liste mit allen Aktionen zeitlich sortiert und je nachdem, wann die nächste Aktion ist, aktiviert sich das nebenläufige Programm. Das Problem mit der ersten und der kombinierten (also 3.) Lösung ist, dass nirgends in der Datenbank (oder sonst wo) festgehalten ist, dass die Nachricht noch raus muss. Das heißt, wenn z.B. während dem Bau der Server den Geist aufgibt, wird das Gebäude zwar fertig, der User bekommt aber keine Meldung, weil die Informationen nicht in der DB liegen sondern in einer Variablen... . Wie würdet ihr das Problem lösen? Oder sagt ihr, dass ein Thread für jeden User unbedenklich ist? Mich würd dringend eure Meinung/Erfahrung interessieren, danke mfg, matthias |
| | |
| | Nach oben #2 |
| Gast
Beiträge: n/a
|
Wiso startest du nicht einen Thread, der die Urzeit zB mit der Date klasse bestimmt und die jede Anfrage der Benutzer meinetwegen auf Festplatte oder Ram speichert und kontinuirlich die Zeit mit Übereinstimmung der Zeit die fü die User bestimmt waren überprüft. So hast du nur ein thread der ständig die Zeit überprüft.
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |