Je pense à créer un serveur MMO, et j'ai regardé comment les autres jeux structurent leur réseau. L'une des choses que j'ai remarquées est qu'il y a toujours un serveur de connexion et ensuite le ou les serveurs de jeu.
Je suis toujours en train de décider si je dois le faire, mais je voudrais d'abord entendre quelques opinions. Quels en sont les avantages et comment le serveur de connexion communique-t-il avec le serveur de jeu pour gérer les connexions?
mmo
networking
server
scalability
JPiolho
la source
la source
Réponses:
Je pense que cela est principalement dû au fait que la connexion et la gestion du jeu sont logiquement plus ou moins indépendantes, elles sont donc généralement séparées pour un meilleur découplage, une maintenance plus facile et une évolutivité. Ils ne doivent pas nécessairement résider sur des serveurs physiques différents, ils peuvent fonctionner aussi bien que des services indépendants sur la même machine. Si le trafic augmente trop, le serveur de connexion peut facilement être déplacé vers une autre machine.
De plus, les serveurs de connexion sont un vecteur d'attaque probable, il est donc bon de les séparer du point de vue de la sécurité.
En interne, différents services côté serveur peuvent utiliser des sockets ordinaires pour communiquer entre eux, que ce soit sur la même machine ou sur une autre machine du cluster. Alternativement, un serveur de base de données pourrait être utilisé pour maintenir un indicateur «est connecté» pour chaque utilisateur.
la source
Un aspect très important dans le développement des MMO consiste à atteindre l'évolutivité et à permettre l'équilibrage de charge.
L'authentification des utilisateurs en vérifiant les informations d'identification, l'état de l'interdiction, le comptage des ouvertures de session récentes, etc. est une tâche qui peut être effectuée sans rien savoir de la logique du jeu ou des données du jeu. Il est donc très facile de déplacer cela vers son propre cluster de serveurs.
De plus, les serveurs de connexion sont une «entrée» bien connue que le client peut contacter. Après une authentification réussie, ils peuvent envoyer le client au serveur approprié dans le cluster de serveurs de jeux. Cette répartition peut être effectuée en transmettant la connexion réseau au bon serveur de jeu ou en disant au client d'ouvrir une nouvelle connexion à un bon serveur de jeu.
Vous devriez penser aux coupures de votre système pour distribution dès le début. Il est très facile d'exécuter plusieurs morceaux sur un même serveur. Mais il est assez difficile de diviser les éléments qui ont été développés en une seule unité.
la source
En tant qu'ancien joueur de WoW, mon expérience était que le serveur de connexion était toujours le maillon le plus faible de la chaîne.
Les serveurs mondiaux étaient généralement d'une stabilité impressionnante, gérant même assez bien des charges exceptionnelles (par exemple de nouvelles versions de pack d'extension).
Mais le ou les serveurs de connexion ne semblaient tout simplement pas fonctionner aussi bien et étaient souvent en panne pendant que les serveurs mondiaux allaient bien. (ce qui signifie que si vous perdez la connexion dans un raid / donjon, vous ne pouvez pas rentrer, mais les autres joueurs vous attendent!)
Et maintenant que le système de connexion WoW est fusionné dans Battle.Net, Starcraft 2 peut devenir indisponible lorsque WoW est sous forte charge (comme cela s'est produit pendant quelques heures lorsque Cataclysm a été lancé)
Donc, si vous construisez un jeu qui aura un très grand nombre d'utilisateurs, l'évolutivité et les performances du système de connexion sont également très importantes.
la source