Seite 2 von 3
Re: Benachrichtigungen
Verfasst: Fr 13. Feb 2015, 10:20
von Freaky-Boy
Serverseitig wird es ja schon berechnet. Ich muss mir höchstens mal gedanken dazu machen, wie ich den Client dazu bringen beim aktivieren des Tabs genau den Bereich zu aktualisierren, der veraltet sein könnte.
Re: Benachrichtigungen
Verfasst: Fr 13. Feb 2015, 12:21
von Gast
Freaky-Boy hat geschrieben:Ich muss mir höchstens mal gedanken dazu machen, wie ich den Client dazu bringen beim aktivieren des Tabs genau den Bereich zu aktualisierren, der veraltet sein könnte.
Um welche Bereiche es geht, die aktualisiert werden müssten ist doch bekannt (PC start, Hack upload, ...).
Kannst du nicht bei jeder Aktualisierung die Serverzeit mit in die Rechnung nehmen?
Z.B. 1% in 2 sec. Alle 2 sec wird aktualisiert. Plötzlich stellst du fest, dass seit der letzen Aktualisierung statt 2 sec 10 sec vergangen sind. Also "simulierst" du 5 aktualisierungen (bzw. lässt den Balken einfach um 5% statt um 1% weiter gehen)
Leider kenne ich die Möglichkeiten von JS ebenfalls nicht. Aber auf die Serverzeit solltest du doch Zugriff haben (schließlich wird sie angezeigt) und eine Differenz bilden sollte für JS doch ebenfalls kein Problem darstellen, oder?
Edit: Eine kurzfristige Lösung für alle, die das Problem stört: Statt einem neuen Tab ein neues Fenster öffnen. (Zumindestens geht dies bei mir)
Re: Benachrichtigungen
Verfasst: Fr 13. Feb 2015, 15:09
von Freaky-Boy
Grundsätzlich gebe ich dir da Recht. Allerdings ist das ganze momentan komplett anders aufgebaut. Wenn du beispielsweise auf Installieren klickst, bekommst du vom server die ansicht für die Installation und die Anweisung: Animiere den Balken und addiere alle X Sekunden 1% hinzu. Wenn du Bei 100% angekommen bist, melde dich bei mir damit ich dir den aktuellen Code schicken kann (Installation abgeschlossen)
Natürlich kann die Seite auch schon eher aktualisiert werden. Aber der Client hat beliebig viele dieser Anweisung gleichzeitig laufen. Welche davon muss aktualiesiert werden. Welcherr Rechner muss geladen werden und und und.
Zusätzlich Redet der Client 1 mal in der Minute mit dem Server um sich zu melden, dass er noch online ist und im die Zeit zu Synchronisieren. Dabei werden aber nur Anzahl Nachrichten, eingehende Angriffe und Serverzeit aktualisiert.
Klar ist es möglich jeden % mit dem Server abzugleichen aber denkt doch mal daran, was dann für eine Serverlast entsteht. Dann brauchen wir einen ganz anderen Server in den zahlt und niemand.
Momentan ist jede Kommunikation so optimiert, dass nur das nötigste übertragen wird.
Ich muss mit da noch ein Mal gedanken machen.
Re: Benachrichtigungen
Verfasst: Fr 13. Feb 2015, 15:24
von Gast
Und wenn man bei der minütlichen Synchronisation die Fortschritte mit einbezieht oder nur alle 25% nachfragt? Das würde immer noch einiges an Zeit für den Nutzer sparen, ohne den Aufwand zu sehr zu steigern. Dann würde der Client, wenn er bei 25% angekommen ist nachfragen und bekommt dann die Meldung, dass schon 35% durch sind und beim nächsten Mal fragt er bei 50%, was zum Beispiel stimmt, und dann bei 75% ist er fertig. Das würde 25% der Wartezeit sparen und die Serverlast in einem sehr kleinen Bereich vervierfachen.
Re: Benachrichtigungen
Verfasst: Fr 13. Feb 2015, 15:28
von Gast
Entweder meine Idee ist einfach nur Schrott oder wir reden einfach aneinander vorbei.
Anweisung:
Animiere den Balken. Führe alle X sekunden folgendes aus:
- Rechne die Differenz aus Y und der momentanen Serverzeit (hast du Zugriff auf die Zeit des Computers?)
- Teile die Differenz durch X und addiere das Ergebnis auf den Balken
- Setze Y auf die Momentane Serverzeit/Computerzeit
Damit müsstest du auch nur zweimal auf den Server zugreifen und würdest den Fortschritt mit der Serverzeit abgleichen. (Sprich wenn drei mal der Code nicht ausgeführt wurde, sieht er, dass drei statt einer Sekunde vergangen sind und addiert 3% statt 1%)
Sprich dass du nicht sagst in 100 sekunden mache das, sondern wenn die Serverzeit 15:34.12 erreicht oder überschritten hat (Beispiel)
Re: Benachrichtigungen
Verfasst: Fr 13. Feb 2015, 16:49
von Gast
Eines kann ich dir versichern: Deine Idee ist nicht schrott. Vielleicht ist es mit der aktullen Zeitpolitik dann nicht so glänzend, aber wenn die Zeit zweimal in der Minute abgefragt wird, kann man nie mehr als eine halbe Minute verpassen.
Re: Benachrichtigungen
Verfasst: Fr 13. Feb 2015, 18:36
von Freaky-Boy
Auf dem Klo ist mir heut diese Lösung des Problems eingefallen.
Momentan sagt der Server dem Browser folgende:
Rufe die Funktion x mit der auf mit dem Parameter y Sekunden. In der Funktion x wird der Fortschritt wie schon beschrieben um 1 Addiert und anschließen ruft sich die Funktion in Y Sekunden mit dem Parameter Y wieder selbst auf. Dadurch entsteht eine Schleife.
Dies muss wie Folgt abgeändert werden:
Rufe die Funktion x mit der auf mit dem Parametern y = Sekunden und Z = Startzeit. In der Funktion x wird der Fortschritt errechnet durch ([Momentane Zeit] - [Startzeit]) / Y Sekunden. Dadurch erhalte ich die genaue Prozentzahl und anschließen ruft sich die Funktion in Y Sekunden mit dem Parameter Y und Z wieder selbst auf. Wodurch wieder eine Schleife entsteht.
Ich muss mir nur noch Gedanken darüber machen, wie ich das implementiere, ohne dass der Spielfluss beeinflusst wird.
Re: Benachrichtigungen
Verfasst: Fr 13. Feb 2015, 23:40
von Gast
Habe ich das richtig verstanden, dass der Fortschritt dadurch mehrfach explizit ermittelt wird und nicht mehr in einem rekursiven Prozess?
Verfasst: Sa 14. Feb 2015, 08:48
von Freaky-Boy
Genau so ist es zu verstehen. Der Fortschritt wird dann bei jeder Berechnung auf Grundlage der vergangenen Zeit berechnet. Momentan kämpfe ich aber noch mit der Zeitdifferenz zwischen Server und Client. Aber das löse ich auch noch.
Re:
Verfasst: Sa 14. Feb 2015, 12:47
von Gast
Freaky-Boy hat geschrieben:Genau so ist es zu verstehen. Der Fortschritt wird dann bei jeder Berechnung auf Grundlage der vergangenen Zeit berechnet. Momentan kämpfe ich aber noch mit der Zeitdifferenz zwischen Server und Client. Aber das löse ich auch noch.
Wenn du ihm sagst: Du bist bei 50%. In 30 sekunden bist du fertig. Und er dann er die 30 sekunden einfach auf die Clientzeit addiert? So würdest du die serverzeit komplett aus dem Spiel lassen (bei dieser Berechnung)