J o: Nachtrag: Zeitdifferenz

Beitrag lesen

Guten Abend,

ich habe endlich wieder etwas Zeit und kann mich noch einmal um dieses Problem kümmern. Leider kann ich darauf nicht mehr Antworten, darum ein neuer Beitrag.

Kurz zusammengefasst: Zwischen meinem Server (Node.js) und den angebundenen Clienten kommt es zu unterschiedlichen Zeiten wenn diese mit new Date().getTime() angefordert werden. Soweit so logisch. Nun suche ich nach einer Möglichkeit, das diese Zeiten (zumindest rechnerisch) synchron laufen.

Dazu habe ich damals vorläufig ein kleines Workaround gebastelt, bei dem der Server seine Zeit alle 10ms zu allen Clients schickt. Dies sollte jedoch schon da keine Dauerlösung sein.

Client:

socket.on( 'setServerTime', function( res ) {
	now = res / 1000;
});

res entspricht dem new Date().getTime() welches auf dem Server aufgerufen wird.

Dies habe ich einmal kurz erweitert um zu schauen ob der unterschied zwischen Client und Server konstant ist.

socket.on( 'setServerTime', function( res ) {
	console.log('');
	now = res / 1000;
	console.log(new Date().getTime()/1000 - now);
});

Wie sich herausstellt ist nicht einmal die Differenz konstant. Ich habe allerdings die Vermutung das dies mehr von der Zeit abhängt welche console.log() benötigt.

Nun arbeitet mein WebGL eigentlich ausschließlich mit performance.now(). ( Was ich auch noch ändern muss, da das Angezeigte auch von der jetzigen Serverzeit abhängt )

Nun hatte ich die Idee, das ich auf die Serverzeit, welche einmalig auf Anfrage bei dem Server zurückkommen kann, einfach performance.now() addieren könnte.

Dazu finde ich aber keine Möglichkeit performance auf den Wert 0 zu setzen, in dem Moment wenn die Serverzeit zum Client kommt. Außerdem weiß ich nicht wieviel Zeit vergeht zwischen 1. Server ruft seine Zeit ab und 2. Client erhält diese Zeit. Außerdem ist nach meinem Empfinden ein Konstrukt wie:

var diff, start;
socket.on( 'event', function( res ) {
	diff = performance.now();
	start = res / 1000;
	
});

// Event braucht die jetzige Serverzeit:
var now = start + performance.now() - diff;

auch eher grenzwertig.

Eine Überprüfung wie performance funktioniert ist auch schwierig, da logischerweise [native code].

Also wie bringe ich dem Client möglichst genau bei welche Zeit der Server hat?

Gruß
Jo