Création d'un serveur, quels vérifications faire ?

Un serveur de jeu ou autre...

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Ceci n'est pas une question avec une but précis, c'est une question de culture et car je me suis souvent demandé comment cela se passais.

Comment les serveurs (de jeu entre autre) gère les joueurs ? Afin d'éviter le cheat (Par exemple sur un jeu de FPS, contrôler si le joueur n'a pas modifier les données qui transitent afin de modifier le nombre de balle ou alors de traverser les murs).

Le serveur doit-il "simuler" le client afin de voir si ses actions sont justes ? Un système comme celui-ci n'est t'il pas extrêmement compliqué à coder ? Et au niveau des ressources, si on a un certain nombre de joueurs en ligne, ça peut être limite aussi.

Donc je me demandais qu'elles étaient les différents moyens disponible pour contrer ce genre de chose ?

Je vous remercie, WinXaito.

+2 -0

Yop

Perso, je fonctionnerais de la sorte : le client a "tout" et demande au serveur que faire si j'appuie sur UP / DOWN / … et le serveur répond :) Ca ressemble à un client léger / serveur lourd, effectivement.

Enfin après je sais qu'il y a des jeux ou c'est kif kif, le client est pas léger ni lourd, et idem pour le serveur . ITC1 je sais pas comment ça se passe


  1. in this case, faut que j'arrête les abréviations moi 

Ma chaine YouTube ! | Seventh, un micro langage communautaire ! | Mon projet : Unamed (en pleine reprogrammation en C++11/SFML2.4) | Mon tuto sur Pygame !

+1 -0
Auteur du sujet

Perso, je fonctionnerais de la sorte : le client a "tout" et demande au serveur que faire si j'appuie sur UP / DOWN / … et le serveur répond :) Ca ressemble à un client léger / serveur lourd, effectivement.

C'est une idée vague ou c'est testé ? Car à première vu je dirais qu'on risque de gros problèmes de latence et lag, mais je ne suis pas sur.

+0 -0

Pas plus que ça AMHA. Ça doit faire autant lagger que quand on voit quelqu'un bouger dans un jeu (puisque c'est à peu près le même principe, on envoie l'input et le serveur renvoie la position).

ThuleMalta - C#, PHP, Python/Django, Unity3D. mon blog

+2 -0

Pour ce qui est de League of Legends, c'est le serveur qui gère tout. J'ai l'impression que les clients font un peu de prédiction et de simulation, mais tout est synchronisé avec le serveur.

(Du coup, quand les serveurs ont du mal, c'est pas non plus déconnant quand on voit tout le boulot qu'ils ont à faire)

La vie, c'est comme les mirabelles

+1 -0

Cette réponse a aidé l'auteur du sujet

Pour parler d'un système d'un jeu que je connais — Minecraft —, celui-ci cumule deux techniques.

La première, c'est celle citée par Folaefolc, pour les actions qui ne nécessitent pas une très faible latence. Lorsqu'une telle action est effectuée par le client (par exemple, poser un bloc), le client va dire au serveur « je fais ça », et attendre que le serveur confirme que c'est bon. Pour donner une impression de fluidité, le client va graphiquement effectuer l'action immédiatement dans certains cas, et en cas d'action invalide, elle sera retirée côté client (typiquement, un bloc qui n'aurait jamais dû être posé sera retiré).

Pour d'autres actions ce n'est pas vraiment possible car il est nécessaire d'avoir une grande fluidité côté client pour que tout soit fluide. Typiquement, les déplacements ou certaines actions. Dans ce cas, ce qui est fait, c'est que le serveur fait de base confiance au client, et vérifie périodiquement ses actions et leur cohérence (vitesse, par exemple). Dans ce cas précis il est difficile de les « corriger », mais ça peut être utilisé pour avertir d'éventuels modérateurs ou bannir automatiquement, selon les cas, selon les serveurs.

Ce n'est pas le meilleur système pour bien contrer la triche, mais il permet une plus grande fluidité d'actions pour les clients, même avec une connexion dégradée.

Pour ce qui est de Minecraft, le premier point est globalement natif, mais le second se borne aux déplacements et à un avertissement dans la console du serveur. Certains serveurs ajoutent des surcouches pour avoir un système plus complet pour éviter la triche.

Édité par AmauryPi

+1 -0

Cette réponse a aidé l'auteur du sujet

LE point clé dans pas mal de cas si on peut, c'est l'interface optimiste, comme évoqué par AmauryPi.

L'interface optimiste, basiquement ça veut dire que l'utilisateur envoie toutes les actions qu'il effectue, le serveur les valide, mais avant même que l'action ne soit validée on fait comme si elle l'était déjà (affichage immédiat du résultat, car on présume que l'action sera validée dans 99.9% des cas). Comme ça on combine une latence apparante faible pour l'utilisateur, et la sécurité.

A noter que ça ne s'applique pas seulement aux jeux, mais aussi de plus en plus à tout le reste, interfaces de sites web notamment.

L'autre élément important et ça a aussi déjà été évoqué, c'est la prédiction. Mais ça peut faire appel à des algorithmes rapidement compliqués suivant le type de jeu (comment prédire où sera l'armée de l'adversaire dans 5 secondes ?) C'est des erreurs de prédiction brusquement corrigées à postériori qui peuvent donner l'impression que les unités « sautent », donc c'est très délicat à mettre en place et surtout à doser.

La logique complètement inverse, client lourd et serveur léger, c'est très mauvais pour gérer la triche, mais ça a quand même d'autres avantages: faire un serveur « idiot » qui broadcast sans discernement tout ce qu'il reçoit aux autres joueurs de la partie, ça a l'avantage d'être hyper flexible et de permettre beaucoup plus de connexions simultanées. Ca peut fonctionner très bien pour des jeux où plus rien n'existe après la fin de la partie, mais clairement ce n'est pas adapté pour un MMO.

Édité par QuentinC

Ma plateforme avec 23 jeux de société classiques en 6 langues et 13000 joueurs: http://qcsalon.net/ | Apprenez à faire des sites web accessibles http://www.openweb.eu.org/

+2 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte