====== 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 jeanluc@tomate:~/ryzomcore$ rgrep Port code/*/*/*.cfg code/nelns/admin_service/admin_service.cfg:WebPort = 49995; code/nelns/login_service/login_service.cfg:WSPort = 49999; // port for the welcome service connection (default is 49999) code/nelns/login_service/login_service.cfg:WebPort = 49998; // port for the web server (default 49998) code/nelns/login_service/login_service.cfg:ClientsPort = 49997; // port for the clients connection (default 49997) code/ryzom/server/admin_executor_service.cfg:ASPort="46701"; code/ryzom/server/admin_executor_service.cfg: "gw_aes.transportCmd aes_l3c(connect addr="+AESHost+":"+AESPort+")", code/ryzom/server/admin_executor_service.cfg: "asc_gw.transportCmd l3c(connect addr="+ASHost+":"+ASPort+")", code/ryzom/server/admin_executor_service.cfg: "aes_gw.transportCmd l3s(open port="+AESPort+")", code/ryzom/server/admin_service.cfg:ASWebPort="46700"; code/ryzom/server/admin_service.cfg:ASPort="46701"; code/ryzom/server/admin_service_default.cfg://ASWebPort="46700"; code/ryzom/server/admin_service_default.cfg://ASPort="46701"; code/ryzom/server/admin_service_default.cfg: "moduleManager.createModule AdminService as webPort="+ASWebPort, code/ryzom/server/admin_service_default.cfg: "as_gw.transportCmd l3s(open port="+ASPort+")", code/ryzom/server/ai_service.cfg:SUPort = 50505; code/ryzom/server/ai_service.cfg:SUAddress = SUHost+":"+SUPort; code/ryzom/server/backup_service.cfg:WebPort = 49970; code/ryzom/server/backup_service_default.cfg:ListeningPort = 49990; code/ryzom/server/backup_service_default.cfg:WebPort = 49898; code/ryzom/server/backup_service_default.cfg:// Port for the Layer 3 interface of the backup service code/ryzom/server/backup_service_default.cfg:L3ListeningPort = 49950; code/ryzom/server/backup_service_interface.cfg:L3BSPort = "49950"; code/ryzom/server/common.cfg:AESPort="46702"; code/ryzom/server/common.cfg: "gw_aes.transportCmd aes_l3c(connect addr="+AESHost+":"+AESPort+")", code/ryzom/server/dynamic_scenario_service.cfg:ASWebPort="46700"; code/ryzom/server/dynamic_scenario_service.cfg:ASPort="46701"; code/ryzom/server/dynamic_scenario_service.cfg:AESPort="46702"; code/ryzom/server/dynamic_scenario_service.cfg:SUPort = 50505; code/ryzom/server/dynamic_scenario_service.cfg:SUGlobalPort = 50503; code/ryzom/server/dynamic_scenario_service.cfg:L3BSPort = "49950"; code/ryzom/server/dynamic_scenario_service.cfg:L3SlaveBSPort = "49951"; code/ryzom/server/dynamic_scenario_service.cfg:L3MasterLGSPort = 49992; code/ryzom/server/dynamic_scenario_service.cfg:LGSBSPort = 49994; code/ryzom/server/dynamic_scenario_service.cfg:L3LGSBSPort = 49995; code/ryzom/server/dynamic_scenario_service.cfg:"gw_aes.transportCmd aes_l3c(connect addr=localhost:"+AESPort+")", code/ryzom/server/dynamic_scenario_service.cfg:SUAddress = SUHost+":"+SUPort; code/ryzom/server/dynamic_scenario_service.cfg:BasePort = 51400; code/ryzom/server/entities_game_service.cfg:AESPort="46702"; code/ryzom/server/entities_game_service.cfg:SUPort = 50505; code/ryzom/server/entities_game_service.cfg:SUGlobalPort = 50503; code/ryzom/server/entities_game_service.cfg:L3MasterLGSPort = 41292; code/ryzom/server/entities_game_service.cfg:L3SlaveLGSPort = 49993; code/ryzom/server/entities_game_service.cfg:SUAddress = SUHost+":"+SUPort; code/ryzom/server/entities_game_service_default.cfg: "glob_gw.transportCmd l3c(connect addr="+SUHost+":"+SUGlobalPort+")", code/ryzom/server/entities_game_service_default.cfg: "lgs_gw.transportCmd masterL3c(connect addr="+MasterLGSHost+":"+L3MasterLGSPort+")", code/ryzom/server/entities_game_service_default.cfg: "lgs_gw.transportCmd slaveL3c(connect addr="+SlaveLGSHost+":"+L3SlaveLGSPort+")", code/ryzom/server/frontend_service.cfg:FSUDPPort = 47851; code/ryzom/server/frontend_service_default.cfg://FrontendPort = 47851; code/ryzom/server/frontend_service_default.cfg:ListenAddress = FSListenHost+":"+FSUDPPort; code/ryzom/server/input_output_service.cfg:AESPort="46702"; code/ryzom/server/input_output_service.cfg:SUPort = 50505; code/ryzom/server/input_output_service.cfg:SUGlobalPort = 50503; code/ryzom/server/input_output_service.cfg:L3MasterLGSPort = 41292; code/ryzom/server/input_output_service.cfg:L3SlaveLGSPort = 49993; code/ryzom/server/input_output_service.cfg:SUAddress = SUHost+":"+SUPort; code/ryzom/server/input_output_service_default.cfg: "glob_gw.transportCmd l3c(connect addr="+SUHost+":"+SUGlobalPort+")", code/ryzom/server/input_output_service_default.cfg: "lgs_gw.transportCmd masterL3c(connect addr="+MasterLGSHost+":"+L3MasterLGSPort+")", code/ryzom/server/input_output_service_default.cfg: "lgs_gw.transportCmd slaveL3c(connect addr="+SlaveLGSHost+":"+L3SlaveLGSPort+")", code/ryzom/server/logger_service.cfg:LGSL3Port = 41292; code/ryzom/server/logger_service.cfg:"lgs_gw.transportCmd l3s(open port="+ LGSL3Port +")", code/ryzom/server/naming_service.cfg:BasePort = 51000; code/ryzom/server/session_browser_server.cfg:SBSPort = 48851; code/ryzom/server/session_browser_server.cfg:"moduleManager.createModule SessionBrowserServerMod sbs suAddr="+SUHost+":49999 listenPort="+SBSPort+" ring_db(host="+DBHost+" user="+DBRingUser+" password="+DBRingPass+" base="+DBRingName+")", code/ryzom/server/shard_unifier_service.cfg:SUGlobalPort = 50503; code/ryzom/server/shard_unifier_service_default.cfg: "glob_gw.transportCmd l3s(open port="+SUGlobalPort+")", code/ryzom/server/welcome_service.cfg:SUPort = 50505; code/ryzom/server/welcome_service.cfg:SUAddress = SUHost+":"+SUPort; {{tag>Outils}}