====== OpenNel Khanat Server - Overview ====== Prerequisite: Our game server uses RyzomCore / OpenNeL, and all related documentation also applies to our game server: www.ryzomcore.org. \\ The alphabetical index page of their "wiki's" makes it possible to find a lot of useful information, tutorials: https://ryzomcore.atlassian.net/wiki/display/RC/Reference+Guides ===== Some previous definitions ===== * **Server**: by //server// we refer to the physical machine on which our universe is running. As an abuse of the language we can one also use the term server for talking about the programs/services of the game running it. * **Shard**: It is an instance of the game universe. Each instance is independent(ex: Aniro and Aristopole formerly on Ryzom) and represents the world in which players circulate.(Note: you can run two //shards// on the same server) * **Service**: A service is a program that runs on the server. The game universe is managed entirely by a dozen services that share different tasks, for example: the service //AI// manages the mobs while the service //IOS// manages the "chat channels". These services are run on the server, but can be distributed on several machines with even different OS(windows + linux for example). In our case, (as our first single serve), a virtual machine named "kh-dev" was running Debian Squeeze 7 and installed on a real physical server: "ninm.net". Our second server run on Debian Jessie 8 and our third is a virtual machine also under Debian Jessie 8. ===== Starting and stopping game services ===== Starting and stopping game services is done using a simple script once connected to our game server. Launching Game Services « Khanat » : $ shard start Stopping Game services « Khanat » : $ shard stop ===== The services ===== There are 23 services(as shown by the display from the binary file of ryzom core). However, they are not all useful for running a game. 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 __Details of the services:__ * **AES** (//Admin Executor Service//): This service allows to launch and kill the other services, and also to collect information about the various services of the machine where it runs. * **AS** (//Admin Service//): When services are spread over several machines, there's a unique administration service called //AS// which coordinates all //AES// tasks for correct order sending. * **AIS** (//AI Service//): The purpose of this service is to manage the AI's of the world(mob behavior). An //AIS// service is responsible for a specific geographical area, as for example on Ryzom, there are six //AIS// services running: one for every continent. * **BMS** (//Backup Manager Service//): This service manages the loading/saving of the "player data". This data is saved(to the disk) in an special "archive format". Each //shard// has two //BMS// services: one master and one second in slave mode. * **EGS** (//Entities Game Service//): One //EGS// service per //shard//, this service manages the status of each avatar, missions, items, Guilds, rules of the game(eg, spells, combat, harvest, craft, etc.), etc. It is a central service and without it the game can't run. * **GPMS** (//Global Position Manager Service//): One per //shard//, it knows the position of each entity(avatar, mobs, etc ...), determines who sees who, and then gives the information to //FES//, it also handles collisions. * **IOS** (//Input Output Service//): One per //shard//, this service takes care of the chat channels, all the texts displayed as well as their different versions(Translation). * **NS** (//Naming Service//): One per //shard//, it's a pure "network service" whose role is to coordinate the other services. It keeps a list of each service launched, it's ports, etc.. It's a kind of "//translation page//", //DNS // as we say in computer slang. * **WS** (//Welcome Service//): One per //shard//, it takes care of the connection process and authentication of the player before returning it to the service //FES//(of his shard). * **TS** (//Tick Service//): One per //shard//, it is a very simple service that manages the game time(date/time) and allows the synchronization of all services. * **MS** (//Mirror Service//): One per server, this service uses "//shared memory//" and synchronizes data across __all servers__ so that services can access specific "Game informations". * **SU** (//Shard Unifier Service//): Unique service, it handles functions not specific to the shard, like the teleportation of a player from one shard to another, it also manages the process of player connections. * **FES** (//Front End Service//): One or more per shard, this service is the one that manages the game client, sending it the different events but also by calculating properties changes to send to it __without saturating bandwidth.__ All communications from the customer go through this service which then routes those calls to the right services. If there is more than one //FES// service for a //shard//, then the connections are distributed uniformly between the different //FES//. This makes it possible to distribute the load between several machines if necessary. * **SBS** (//Session Browser Service//): Similar to //FES//, it handles Rings sessions. * **MFS** (//Mail Forum Service//): Web IG? * **LGS** (//Logger Service//): Log Service? * **DSS** (//Dynamic Scenario Service//): Ring? * **PDSS** (//Persistent Data Service//): This service creates archives for regularly do backups of files containing information about avatars. It is also able to extract some information to generate "player stats". Not used. * **MOS** (//Monitor Service//): (not used) * **LAS** (//Log Analyzer Service//): (not used) * **RBS** (//Reference Builder Service//): (not used) ===== 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}}