L'architecture des MMORPGs

Architecture Client-Serveur

Nous allons commencer par étudier l'architecture des acteurs Un jeu multi-joueur veut dire qu'il y a les joueurs qui jouent sur leur machine chez eux, et qui sont connectés au travers de l'Internet aux serveurs sur lesquels sont centralisées les informations partagées relative au jeu et aux joueurs. On se réfèrera ensuite au logiciel installé sur la machine du joueur comme étant le client. L'architecture Client-Serveur définit la séparation des fonctionnalités du jeu: les traîtements qui seront à la charge de chaque machine cliente d'un joueur, et ceux qui seront de la responsabilité des serveurs.

Architecture Client-Serveur

Donc le client communique en permanence avec un ou plusieurs serveurs. Un composant appelé ici le "Messenger" est responsable de l'interprétation des messages échangés entre le client et le serveur. Pour assurer la sécurité des échanges, les données transportées sont cryptées. On trouve aussi un module cryptage/décryptage sur les serveurs et sur les clients. Enfin, on isole dans le module "Network" toute la gestion de la communication au sens réseau, c'est à dire la gestion de la socket avec le serveur de jeu.


Application Serveur

Nous allons commencer par regarder l'architecture côté serveur. Le schéma ci-dessous présente une vue logique des différents composants nécessaires au fonctionnement du jeu. Le Master est le composant qui va régir l'interaction de tous les autres modules. D'un point de vue matériel, c'est lui qui va s'assurer que tous les serveurs fonctionnent bien et relayer les messages entre serveurs.

Application Serveur

Le module World contient la base de données contenant toutes les informations relatives au monde du jeu et aux objets qu'il contient. Du fait de la lenteur des accès aux bases de données, c'est une copie en mémoire de cette base de données permettra au Master d'accéder aux données du jeu sans ces surcoûts. Compte tenu de la taille du monde et du nombre d'objets à gérer, cette copie mémoire de la base de donnée est répartie sur plusieurs serveurs. Souvent plusieurs dizaines voire plus (ou bien plus!).

Le module AI Controler est lui aussi généralement déployé sur plusieurs serveurs. Il s'agit des serveurs qui vont contrôler l'IA, l'Intelligence Artificielle. Ces derniers interagissent avec le Master comme des pseudos-clients.

Le module User contient lui la base de données des utilisateurs. Cette base de données contient toutes les informations telles que le profil du joueur, ses statistiques, ses login et mots de passe de connexion au jeu... Dans l'architecture d'un MMORPG, il y a toujours un pool de serveurs dédiés à l'authentification des joueurs voulant jouer. Le Master redirige les nouveaux clients vers les serveurs d'authentification qui gèrent tous les aspect liés à la sécurité. Une fois authentifié, un client se voit attribué l'adresse de son serveur de jeu (module World) par le Master.

On retrouve aussi le Messenger qui va former et interprèter les messages à destination ou en provenance des clients, et les modules Network et Encrypt/Decrypt pour le cryptage et la communication réseau. Alors que l'administration du monde du jeu ou l'authentification des clients sont des fonctions distribuées sur plusieurs serveurs, dont c'est la fonction principale, les modules Messenger, Encrypt/Decrypt et Network sont présents sur chaque machine. Dans la section suivante, nous nous intéresserons surtout aux interactions entre les clients et les serveurs de jeu.


Application Client

Nous allons maintenant voir l'architecture de l'application côté client. Afin d'améliorer l'efficacité des serveurs, le plus de traîtements possibles sont délégués aux clients. Le client implémente un MVC (Modèle-Vue-Controleur) qui est un pattern connu très utilisé pour els interfaces graphiques.

Application Client

Le master est le composant qui prend les décisions au niveau local (du client). Il est entre-autre responsable de la transmission des messages et des informations entre les différents modules du client. Il pilote 7 composants : AI, Graphics, Command, Physics, Collision et Network.

Le World a un rôle similaire pour le client que pour le serveur, mais il s'étend seulement aux environs de la zone du monde dans laquelle se trouve actuelement le joueur. Elle permet de stocker localement une copie des données du serveur, qui sera mise à jour régulièrement par ce dernier, dans le but de limiter les requêtes du client au serveur. Il tient le rôle de modèle de notre MVC.

Le composant AI (Artificial Intelligence) a le rôle de faire évoluer les objets liés au joueur, mais non contrôlés par ce dernier. Cela comprend par exemples, des personnages alliés qui vont l'aider dans l'accomplissement du jeu. Le module AI est alimenté par les actions du joueur et y répond selon la logique du jeu.

Le module Graphics est composé de la vue, des graphiques du jeu, et du module permettant de gérer les actions du joueur, vu comme des entrées système(clavier - souris). Le master demande à la Vue de procéder à l'affichage graphique lors du démarrage du jeu. Ils constituent la vue de notre MVC. Le module Graphics est responsable du rendu de la Vue à l'écran. Il permet de se découpler de toutes les APIs système nécessaire à l'affichage graphique. La vue est aussi responsable de traduire les actions utilisateurs en messages compréhensibles par le Master. Le module Inputs permet donc l'abstraction du type d'entrée: joystick, clavier, souris, manette, ect... C'est donc le contrôleur de notre MVC.

Le composant Command est là pour prendre en charge des fonctions qui n'ont pas directement d'impact sur le gameplay, d'où leur abstraction du Master. Ces fonctions comprennent la synchronisation de l'horloge du client sur les horloges serveurs, toutes les statistiques relatives aux actions du joueur (comme le nombre de frags depuis le début du jeu, ect...), et tout ce qui a attrait au chat dans le jeu.

Les serveurs de jeu ne contiennent qu'une vue logique du monde du jeu et des objets qui évoluent à l'intérieur. C'est donc chez le client que réside le module Physics qui doit permettre de prédire l'état d'un objet suivant la physique du monde du MMORPG définit par le développeur du jeu. Ce module permet d'abstraire toutes ces règles de physiques du reste de l'application.

Parmis les règles de physiques, la gestion des collisions veillant à ce que 2 objets ne se superposent pas (personne n'aime les bugs de ce genre là lorsque votre personnage est à moitié dans le mur ou dans un autre personnage). Pour des raisons de maintenance, les algorithmes de gestion de collision sont deportés dans le module CollisionDetection.

Enfin on retrouve nos composants servant à la communication Client-Serveur, le module Network qui contient le Messenger, responsable de la formation des messages pour le serveur, le module encryptage, et le module de gestion de la communication avec le serveur.