17 janvier 2022

Packet Loss


Je travaille actuellement sur l'optimisation du mode Online de Dragon Ball Devolution. Aussi, j'aurais besoin de votre aide pour effectuer des tests avec la démo proposée dans cet article. Merci pour votre participation !

Comme expliqué précédemment, j'utilise la librairie PeerJS pour établir une connexion directe (peer to peer) entre les joueurs.

Sachant que la plupart des joueurs ont une connexion assez lente, je pensais optimiser le mode online en envoyait un minimum de requêtes selon la formule : moins de transferts = moins de lag.

J'envoyais donc une minuscule requête par action, par exemple :

  • Le joueur a bougé sur l'axe x en position 23 ? J'envoie X23, soit 3 bytes.
  • Le joueur appuie sur la touche Attack ? J'envoie A1, soit 2 bytes.
  • Le HP du joueur a été modifié ? J'envoie H185, soit 4 bytes.

Et je n'envoyais rien quand il ne se passait rien.

À l'usage, tout le monde a pu se rendre compte que ça ne marchait pas aussi bien ça...

C'était rageant d'avoir un jeu qui lag alors que la même technologie permet de streamer de la vidéo. Et puis je suis tombé sur le site Packet Loss Test qui propose d'effectuer des tests de vitesse de connexion tout en donnant des explications sur le phénomène des paquets perdus. Je n'y avais pas songé, mais des fois les paquets envoyés n'arrivent pas, comme à La Poste. Donc si je n'envoie pas les infos parce que l'état du joueur n'a pas changé, alors que son adversaire n'a pas reçu le changement d'état juste avant, il en résulte un gros décalage entre les deux joueurs.

Pour vérifier mes conjectures, veuillez opérer ce test contre un adversaire et communiquer le résultat dans le CHAT-BOX :

  • N'utilisez pas de proxy pour le test
  • Ne changez pas de page pendant le test