Serveur OpenNeL Khanat - Tour d'horizon
Note préalable : notre serveur de jeu utilisant RyzomCore / OpenNeL, toute la documentation qui s'y rapporte s'applique également à notre serveur de jeu : www.ryzomcore.org.
La page d'index alphabétique de leur wiki permet de trouver bon nombre d'informations utiles, de tutoriels (en anglais exclusivement par contre) : https://ryzomcore.atlassian.net/wiki/display/RC/Reference+Guides
Quelques définition préalables
- Serveur : par serveur on se réfère à la machine physique sur laquelle tourne notre univers. Un abus de langage fait qu'on utilise aussi le terme serveur pour parler des programmes/services du jeu tournant dessus.
- Shard : C'est une instance de l'univers de jeu. Chaque instance est indépendante (ex : Aniro et Aristopole anciennement sur Ryzom) et représente un monde dans lequel circulent les joueurs. (note : on peut faire tourner deux shards sur un même serveur)
- Service : Un service est un programme qui s'exécute sur le serveur. L'univers de jeu est géré entièrement par une dizaine de services qui se partagent des tâches : par exemple le service AI gère les mobs tandis que le service IOS gère (entre autres) les canaux de chat. Ces services s'exécutent sur le serveur, mais on peut les distribuer sur plusieurs machines avec même des OS différents (un service sous windows + un autre sous GNU/Linux par exemple).
Dans notre cas, notre premier serveur unique, une machine virtuelle dénommée « kh-dev », fonctionnait sous Debian 6 (Squeeze) et était installée sur un véritable serveur physique : « ninm.net ». Notre second serveur tourne sous debian 8 (Jessie) et notre troisième est une machine virtuelle sous debian 8 aussi.
Lancement et arrêt des services du jeu
Le lancement et l'arrêt des services du jeu se font à l'aide d'un script simple une fois connecté sur notre serveur de jeu
Lancement des services du jeu « Khanat » :
$ shard start
Arrêt des services du jeu « Khanat » :
$ shard stop
Les services
Il y a 23 services comme le montre l'affichage du dossier des binaires de ryzom core. Cependant, ils ne sont pas tous utiles pour faire tourner un jeu :
khanat@kh-dev:~$ ls ryzomcore/code/build/bin/ryzom_* ryzomcore/code/build/bin/ryzom_admin_service ryzomcore/code/build/bin/ryzom_ai_service ryzomcore/code/build/bin/ryzom_backup_service ryzomcore/code/build/bin/ryzom_dynamic_scenario_service ryzomcore/code/build/bin/ryzom_entities_game_service ryzomcore/code/build/bin/ryzom_frontend_service ryzomcore/code/build/bin/ryzom_general_utilities_service ryzomcore/code/build/bin/ryzom_gpm_service ryzomcore/code/build/bin/ryzom_ios_service ryzomcore/code/build/bin/ryzom_log_analyser_service ryzomcore/code/build/bin/ryzom_logger_service ryzomcore/code/build/bin/ryzom_mail_forum_service ryzomcore/code/build/bin/ryzom_mirror_service ryzomcore/code/build/bin/ryzom_mission_compiler ryzomcore/code/build/bin/ryzom_monitor_service ryzomcore/code/build/bin/ryzom_naming_service ryzomcore/code/build/bin/ryzom_patchman_service ryzomcore/code/build/bin/ryzom_pd_support_service ryzomcore/code/build/bin/ryzom_persistant_data_service ryzomcore/code/build/bin/ryzom_reference_builder_service ryzomcore/code/build/bin/ryzom_session_browser_service ryzomcore/code/build/bin/ryzom_shard_unifier_service ryzomcore/code/build/bin/ryzom_tick_service ryzomcore/code/build/bin/ryzom_welcome_service
Détail des services :
- AES (Admin Executor Service) : Ce service permet de lancer et tuer les autres services ainsi que de collecter des informations sur les différents services de la machine sur lequel il tourne.
- AS (Admin Service) : Lorsque les services sont répartis sur plusieurs machines, il existe alors un service d'administration unique AS qui coordonne tous les AES et permet de leur envoyer des commandes.
- AIS (AI Service) : Le but de ce service est de gérer les IA du monde (le comportement des mobs). Un service AIS est responsable d'une zone géographique. Par exemple sur Ryzom, il y a six services AIS qui tournent : un par continent.
- BMS (Backup Manager Service) : Ce service gère le chargement et la sauvegarde des données des joueurs. Ces données sont sauvées sur le disque dans un format d'archivage. Chaque shard a deux services BMS : un maitre et un esclave.
- EGS (Entities Game Service) : À raison d'un service EGS par shard, ce service gère l'état de chaque avatar, les missions, les items, les guildes, les règles du jeu (ex: sorts, combat, récolte, craft, etc). C'est un service central et sans lui le jeu ne peut tourner.
- GPMS (Global Position Manager Service) : À raison d'un par shard il connaît la position de chaque entité (avatar, mobs, etc.), détermine qui voit qui pour donner l'information au FES, et traite les collisions.
- IOS (Input Output Service) : À raison d'un par shard c'est ce service qui s'occupe des canaux du chat, de tous les textes affichés ainsi que leurs versions locales (traduction).
- NS (Naming Service) : À raison d'un par shard c'est un service purement réseau dont le rôle est de coordonner les autres services. Il garde une liste de chaque service lancé, le port sur lequel il écoute, etc. C'est une sorte de “pages jaunes”, DNS dirions-nous dans le jargon informatique.
- WS (Welcome Service) : À raison d'un par shard, il s'occupe du processus de connexion et d'authentification du joueur avant de le renvoyer vers le service FES de son shard.
- TS (Tick Service) : À raison d'un par shard c'est un service très simple qui gère le temps jeu (date/heure) et permet la synchronisation de tous les services.
- MS (Mirror Service) : À raison d'un par serveur, ce service utilise la « mémoire partagée » et synchronise les données entres tous les serveurs afin que les services puissent accéder aux informations de jeu.
- SU (Shard Unifier Service) : Service unique, il s'occupe de fonctions non spécifiques à un shard comme la téléportation d'un joueur d'un shard à un autre, et il gère aussi le processus de connexion des joueurs.
- FES (Front End Service) : Un ou plusieurs par shard, ce service est celui qui gère le client de jeu, en lui envoyant les événements mais aussi en calculant quels changements de propriétés lui envoyer sans saturer la bande-passante. Toutes les communications en provenance du client passent par ce service qui route ensuite ces communications vers les bons services. S'il y a plus d'un service FES pour un shard alors les connections sont réparties de manière uniforme entres les différents FES (ndm: round-robin ?). Cela permet donc de répartir la charge entres plusieurs machines si nécessaire.
- SBS (Session Browser Service) : Similaire à FES, il gère les sessions Ring.
- MFS (Mail Forum Service) : Web IG ?
- LGS (LogGer Service) : Service de Log ?
- DSS (Dynamic Scenario Service) : Ring ?
- PDSS (Persistent Data Service) : Ce service crée des archives pour sauvegarder de manière régulière les fichiers contenant les informations des avatars. Il est aussi capable d'extraire certaines informations pour générer des stats sur les joueurs. Non utilisé.
- MOS (MOnitor Service) (non utilisé)
- LAS (Log Analyzer Service) (non utilisé)
- RBS (Reference Builder Service) (non utilisé)
Liste des ports
- admin_service.cfg
- WebPort = 49995
- login_service.cfg
- WSPort = 49999
- WebPort = 49998
- ClientsPort = 49997
- admin_executor_service.cfg
- ASPort=“46701”
- admin_service.cfg
- ASWebPort=“46700”
- ASPort=“46701”
- ai_service.cfg
- SUPort = 50505
- backup_service.cfg
- WebPort = 49970
- ListeningPort = 49990
- WebPort = 49898
- L3BSPort = “49950”
- common.cfg
- AESPort=“46702”
- dynamic_scenario_service.cfg
- ASWebPort=“46700”
- ASPort=“46701”
- AESPort=“46702”
- SUPort = 50505
- SUGlobalPort = 50503
- L3BSPort = “49950”
- L3SlaveBSPort = “49951”
- L3MasterLGSPort = 49992
- LGSBSPort = 49994
- L3LGSBSPort = 49995
- BasePort = 51400
- entities_game_service.cfg
- AESPort=“46702”
- SUPort = 50505
- SUGlobalPort = 50503
- L3MasterLGSPort = 41292
- L3SlaveLGSPort = 49993
- frontend_service.cfg
- FSUDPPort = 47851
- input_output_service.cfg
- AESPort=“46702”
- SUPort = 50505
- SUGlobalPort = 50503
- L3MasterLGSPort = 41292
- L3SlaveLGSPort = 49993
- logger_service.cfg
- LGSL3Port = 41292
- naming_service.cfg
- BasePort = 51000
- session_browser_server.cfg
- SBSPort = 48851
- shard_unifier_service.cfg
- SUGlobalPort = 50503
- welcome_service.cfg
- SUPort = 50505