Zeitsynchronisation, aber wie?

  • Themenstarter Themenstarter MRQ
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

MRQ

Gast
Hallo erstmal.

Ich baue grad nen Browsergame rein auf JAVAbasis (JApplet/Servlet).
Leider habe ich ein Problem bei der Zeitsynchronisation, da ich nicht bei jeder Anfrage die aktuelle Zeit mitschicken will.

Bei Appletstart holt sich das Applet die aktuelle Serverzeit und rechnet diese dann mit Hilfe eines Timers immer hoch.
Der Timer funktioniert auch wunderbar.
Nur leider ... und das ist das Problem ... ist die geholte, aktuelle Serverzeit ja nicht korrekt, da die Kommunikation teilweise etwas dauern kann (Internet kennt man ja).
Somit kann es vorkommen, dass die Zeit ein paar Sekunden hinten dran ist. Dies ist natürlich nicht im meinem Sinne und daher suche ich einen Algorithmus bzw ne Idee, wie ich die Zeit synchronisieren kann.
Hoffe mein Problem ist deutlich geworden.

Danke für eure Hilfe
 
Man könnte einen weiteren Thread starten, der sich unabhängig vom restlichen Geschehen darum kümmert, in bestimmten Abständen die Zeit zu besorgen.
 
Naja, das lößt das Problem ja nicht.
Problem ist ja dies.

1) Client frag Zeit beim Server ab
2) Server empfängt Anfrage
3) Server sendet Zeit zurück
4) Client bekommt Zeit

Diese Kommunikation benötigt Zeit.
Der Server sendet also die Zeit und der Client empfängt sie ...... dazwischen ist aber schon Zeit vergangen, die Zeit ist also nicht mehr aktuell.
Ob ich die Zeit jetzt einmal oder 1000 mal sende .... die Zeit ist nie aktuell, weil die Kommunikation immer etwas Zeit benötigt.
Ich brauche also ne Möglichkeit die Zeit zu synchronisieren.

Sobald der Client die richtige Zeit hat, ist alles kein Prob mehr ....... der Timer vom Client rechnet dann immer die richtige aktuelle Zeit aus (aber halt abhängig von der initialen Serverzeit).

mfg MRQ
 
MRQ hat gesagt.:
Naja, das lößt das Problem ja nicht.
Problem ist ja dies.

1) Client frag Zeit beim Server ab
2) Server empfängt Anfrage
3) Server sendet Zeit zurück
4) Client bekommt Zeit

Diese Kommunikation benötigt Zeit.
Der Server sendet also die Zeit und der Client empfängt sie ...... dazwischen ist aber schon Zeit vergangen, die Zeit ist also nicht mehr aktuell.
Ich bezweifel, dass das mehrere Sekunden dauert, höchstens eine und dass kann das Game jawohl verkraften oder?
Wenn nicht, wünsche ich viel Erfolg mit der Lösung von Bleiglanz.
 
stevg hat gesagt.:
[...]

Ich bezweifel, dass das mehrere Sekunden dauert, höchstens eine und dass kann das Game jawohl verkraften oder?
Wenn nicht, wünsche ich viel Erfolg mit der Lösung von Bleiglanz.

Naja, bei starker Auslastung der Internet-Verbindung kann es schon etwas länger dauern. Aber das mit der Zeit-Synchronisation stelle ich mir trotzdem etwas schwierig vor. Vor allem kenne ich eigentlich kein Spiel im Netzwerk, dass das brauchen würde. Wenn ich da an die ganzen 3D Shooter sowie Rennfahrspiele denke: Die haben so etwas auch nicht. Und bei solchen Spielen ist die Zeit - vor allem die Zeit der Datenübermittlung - ein wichtiger Punkt.

Ich weiss nicht, ob das hilft bzw. im Sinne des Problems ist: Ich würde das einfach wie in den meistens Chats machen. Einfach die Info an den Server schicken und dann eine Bestätigungen zurückschicken, die die Zeit enthält, zu der die Daten am Server angekommen sind. Bringt natürlich nix, wenn Du die Zeit wirklich am Client brauchst. Aber das kann ich mir irgendwie nicht vorstellen.
 
Grizzly hat gesagt.:
stevg hat gesagt.:
[...]

Ich bezweifel, dass das mehrere Sekunden dauert, höchstens eine und dass kann das Game jawohl verkraften oder?
Wenn nicht, wünsche ich viel Erfolg mit der Lösung von Bleiglanz.

Naja, bei starker Auslastung der Internet-Verbindung kann es schon etwas länger dauern.
Wieso das? Die Zeit an sich bekomme ich in einem byte untergebracht oder der Rest den ich so benötige kann auch nicht so viel sein.
 
stevg hat gesagt.:
[...]

Naja, bei starker Auslastung der Internet-Verbindung kann es schon etwas länger dauern.
Wieso das? Die Zeit an sich bekomme ich in einem byte untergebracht oder der Rest den ich so benötige kann auch nicht so viel sein.

Das hat ja mal nichts mit der Paket-Größe des eigenen Pakets zu tun. Die Frage ist doch: Was ist da sonst noch alles unterwegs. Dann gibt es noch Router/Firewalls, die Pakete über gewisse Ports priorisieren. Da kann es schon zu Verzögerungen kommen.

Beispiel:
Meine Familie und ich gehen über einen DSL 1024 Zugang online. Wenn alle etwas ziehen und ich bspw. bei SourceForge.net per SSH eingeloggt bin, kann ich zuschauen, wie meine getippten Zeichen langsam erscheinen. Prinizipiell müsste es ja relativ schnell gehen - das Paket besteht ja immer nur aus einem Zeichen (+ Steuercodes, Verschlüsselung u.ä.).
Und bei einer Telnet oder FTP Verbindung sieht es nicht anders aus, obwohl da noch weniger übertragen wird.
 
sollte so heissen:

mag ja naiv klingen, aber kann man sich nicht einfach nen timestamp bei anfragesendung machen und bei eintreffen der antwort wieder nen timestamp? differenz dann auf die empfangene zeit draufrechnen.

warum funktioniert das nicht?! (hört sich bei bleiglanzes post so an)
 
Erstemal Danke für eure Antworten.

1) Ich brauche die echte Zeit ...... jede Sekunde Unterschied ist ne Ungenauigkeit, die meiner Meinung nach unnötig ist.

2) Kann der Lag mehr als eine Sekunde sein

3) Es nützt nicht die Gesamtanfragedauer zu stoppen ..... ich muss nur die Verzögerung vom Server, bis zum Client ermitteln.

4) Wenn das mit nem TimeServer geht wäre das super ...... wie mache ich das mit JAVA? Wie bringe ich meinem Applet bei, seine Zeit (als longWert gespeichert) mit nem TimerServer zu synchronisieren 😀 .

5) Könnte ich bei jeder Antwort vom Server die aktuelle Zeit ... zu der die Antwort auch generiert wurde .... mitschicken. Damit wäre das Problem ansich ja umgangen, aber ich find die Lösung nicht schön :meld: .

6) Lese ich jetzt den Link von Bleiglanz.

nochmal Danke :wink:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben