RSS-Feed

David Hadizadeh

E-Mail

Xing-Profil

LinkedIn

Google+

Impressum

 




Team Challenger Teil 3: Synchronisation

14.09.2012

Kommen wir zum 3. Teil der Android-App-Planung, zur Synchronisation.
Dazu gibt es mehrere Möglichkeiten.
Bei vielen Tools spielt die Zeit eine Rolle, zu der die Daten vom Client beim Server ankommen.
Das zu realisieren ist trivial.
In meinem Fall benötige ich aber die Zeit des Absendens der Daten vom Client zum Server.
Der Grund dafür ist, dass bei einem Geschwindigkeitsspiel, wie im letzten Beitrag beschrieben,
interessant ist, wann der Spieler beim Client den Button gedrückt hat und nicht, ob er eine bessere
Anbindung zum Server hat, als ein anderer Client.

Wie ist dies nun zu realisieren?
Die optimale Lösung wäre eine über NTP (Network Time Protocol).
Diese halte ich aber vorerst für etwas zu hoch gegriffen.
Es wäre durchaus eine Möglichkeit dies allerdings am Ende noch ein mal zu implementieren.
Dies würde den übrigen Teil der App nicht weiter betreffen.

Um eine einfache Synchronisation zu ermöglichen rechne ich mit der Systemzeit (in Micro-Sekunden) der Clients und des Servers.
Allerdings können diese natürlich unterschiedlich sein, sie müssen also zu Beginn ein mal synchronisiert werden und können dann
bei notwendigen Sendungen (Klick auf den Button) mitgesandt werden.
Für diese Anfangssynchronisation habe ich mir 5 Schritte überlegt:

  1. Serverzeit abfragen
  2. DeltaZeit = (-1) * (ClientZeit – ServerZeit)
  3. An den Server die (ClientSystemZeit + DeltaZeit) senden
  4. Latenz = Vom Server die Differenz seiner Zeit und der gesendeten Clientzeit erhalten
  5. DeltaZeit = DeltaZeit + (Latenz / 2)

Die Zeit ist nun beim Client durch die einfache Addition der aktuellen Zeit und der ermittelten DeltaZeit zu berechnen.

Ich will nun noch mal auf die Division durch 2 im letzten Schritt eingehen:
In Schritt 1 entsteht eine Latenzzeit (nur der Rückweg, die Anfragedauer spielt keine Rolle),
In Schritt 2 entsteht nun eine weitere Latenzzeit, die in Schritt 3 vorhandene Latenz
ist wiederum unwichtig, da die Differenz bereits berechnet wurde und die tatsächliche Zeit somit keine Rolle mehr spielt.
Hier ist also zu erkennen, dass wir insgesamt zwei Latenzen zu verzeichnen haben, die auf die berechnete Latenz Einfluss haben.
Somit drückt die berechnete Latenz die zweifache Latenz aus und ist daher durch 2 zu teilen.

Das waren soweit nun alle interessanten Themen zur Planung.
Ich werde das ganze nun implementieren, was einige Zeit in Anspruch nehmen wird.

Hier geht es weiter zu Teil 4, dem OpenGL-Abschnitt

Kategorie: News, Programmierung |

Schlagwörter: , , , ,

Impressum