[Algo] Réseau, décalage temporel et aller retour de paquets

Voilà je me pose une question toute conne: Dans un JV (notamment les FPS) il y a des algos de compensation de lag. Par exemple le serveur recoit un paquet d’un client, émit il y a 47 millisecondes plus tot, et compare le résultat de cette action dans le passé (en gros, hein). La seule question que je me pose est: comment ce foutu serveur est il capable de connaitre le temps passé entre l’émission et la réception du paquet - je veux dire, exactement?

On peut connaitre le temps moyen d’un aller retour entre deux machines, mais ca ne dit pas combien de temps un paquet A va faire l’aller retour: il se peut que subitement, le joueur ai une connection fluctuante et que son ping varie énormément entre deux paquets.

J’en suis venu à me dire que le client synchronisait une horloge interne sur le serveur (et envoyait dans le paquet de données une donnée temporelle basée sur cette horloge synchronisée), mais dans ce cas là, encore une fois, on en vient au problème: comment se fait la synchronisation?

Si le client envoie au serveur un message “donne moi ton heure” le temps d’aller retour du paquet fera un décalage, décalage qui sera aléatoire suivant l’état de la connection de l’utilisateur au temps de l’envoi/réception.

Donc comment font ils?

on peut approximer la différence d’horloge en envoyant un certain nombre de paquets et en supposant qu’en moyenne, ils ont mis autant de temps pour l’aller que pour le retour.

je suis absolument pas certain qu’en pratique ils fassent comme ça, car je ne pense pas qu’une synchronisation exacte soit nécessaire. seul le temps d’un aller-retour est intéressant, car quel que soit la différence entre l’aller et le retour on connait l’information qu’avait reçu la machine client au moment ou le joueur a cliqué.

[quote="[PERE]Cil, post:1, topic: 47581"]
Voilà je me pose une question toute conne: Dans un JV (notamment les FPS) il y a des algos de compensation de lag. Par exemple le serveur recoit un paquet d’un client, émit il y a 47 millisecondes plus tot, et compare le résultat de cette action dans le passé (en gros, hein). La seule question que je me pose est: comment ce foutu serveur est il capable de connaitre le temps passé entre l’émission et la réception du paquet - je veux dire, exactement?[/quote]
Pour NTP voila à peu près comment ca marche :

  • le client envoit son heure courante au serveur
  • le serveur renvoi son heure courante et la difference de temps par rapport à l’heure du client
  • le client recoit la réponse. En chronometrant le temps entre l’envoi du 1er message et la réponse, en divisant par 2 il connait le temps mis par ce paquet (en considerant qu’il faut le meme temps dans les 2 sens). Le client peut donc rajouter ce temps à l’heure renvoyée par le serveur pour connaitre l’heure
    En refaisant plusieurs fois de suite cette operation et avec plusieurs serveurs differents, cela permet d’augmenter la précision.

[quote="[PERE]Cil, post:1, topic: 47581"]
Donc comment font ils?[/quote]

Ils ont STFW eux :slight_smile: