Bonjour,
Je programme actuellement un squelette de MMO en C# et j'aurais besoin de conseils pour l'architecture réseau de ma nouvelle version.
Actuellement j'ai un seul exécutable qui fait tout - communication client / déroulement du monde / base de données / physique / etc ... Cependant j'aimerais le rendre "scalable" en le subdivisant en plusieurs exécutables pouvant être distribués sur plusieurs machines :
- Un serveur d'authentification
- Un "Master" serveur qui dispatche les instructions des clients aux serveurs de jeux / centralise les mises à jours des serveurs de jeux vers le client approprié.
- Des serveurs de jeux qui font "tourner le jeux" proprement dit, à raison de un par Région/Monde/Planète/Autres.
- Une base de données centrale unique dans laquelle tout les serveurs de jeux viennent lire / écrire les différents objets (avec probablement un système "Read/Write" Lock pour éviter les conflits)
(Plus ou moins basé sur une interview des créateurs d'EvE et de pas mal d'autres jeux).
Le tout communiquant en TCP avec un format de données binaires (au lieu de messages XML) pour gagner en vitesse.
Mes interrogations portent principalement sur le serveur d'authentification : j'ai déjà un système de gestion de compte avec mot de passe (plus ou moins) sécurisé, mais après ?
a) Le client se reconnecte-t-il directement au Master Serveur, celui-ci ayant été prévenu par le serveur d'authentification d'accepter l'IP Client X.X.X.X ?
b) Le client reste-t-il sur le serveur d'authentification, qui se charge de faire passer les commandes au reste du réseau (auquel cas je me tâte à le fusionner avec le "Master Serveur"), faisant au final office de filtre ?
c) Un autre système ?
d) La réponse d.
Quasiment toutes les architectures que j'ai trouvé sur internet possède un serveur d'authentification, mais impossible de savoir ce que fait ce machin ... (A part authentifier, mais faut bien faire "circuler l'authentification" dans les autres machines à un moment).
Merci de votre aide.
Partager