Multiplayer Server/Channel/Lobby Setup

Hi all, just wanted to get some sort of verificaton of the setup I plan to use. This is for a FPS.

What I want:

  • Login Server

  • Server Selection for regional server

    • after Login the player can choose which server he wants to join
    • this selection is not permanent, whenever the player wants to switch servers he should be able to do it
  • Channel Selection for different skill-level (Beginner (below lvl10)/Advanced (between lvl10 and lvl30) /Pro (above lvl30)/All)

    • after the player chose a server he is now able to select a difficulty
    • from now on till the game start the player should have access to his inventory (weapon/skins/clothes), settings, shop, currency etc.
    • player should have access to the channel selection chat
    • a channel is limited to a maximum of 500 player
    • there should be 10 or 11 channel per server
  • Room/Match Selection

    • after the player chose a channel he is now able to choose one room/match he wants to play in
    • player should be able to create a new room/match
    • player should have access to the room/match selection chat
  • Game Lobby

    • after the player chose a match he wants to play in he joins the lobby of said match
    • player should have access to the lobby chat
    • player should be able to change settings of the match (if he is the master of said match)
    • player should be able to “ready up” or start the match if all other players are ready => game start
    • player should be able to “ready up” when a match is already running, so they can join the game
    • OR (because I am not sure if the first one is actually possible)
    • player who connect to the room while a match is running should be loaded directly into the game without visiting the lobby
  • During the game

    • player should have access to the match chat
    • the match should be played on a dedicated server and should not be hosted by one player
    • the server should simulate all physics and calculations (if something did hit or how fast a player moves)
    • if a player disconnects the server should release his spot and be able to accept new players
  • After the game

    • after the match finished the player should see an end screen with all scores and the characters of all players
    • after clicking a button ( or a certain time) players are moved back into the room lobby
    • now players are able to leave the match or play again in the room with the same settings

Now how I plan to do this:

Login Server:

  • one single process which can verify the players login data against a postgresql database entry
  • if the login is successful it should send the player a verification and a list of all available servers (with their ip)

Regional Server:

  • one process which makes shop, inventory, settings storage available to the player and has access to a postgresql database where it gets all the information from
  • one process which handles the chat
  • one process which handles all 10 or 11 channel with a maximum of 500 players each (~ 5500 players max)

Shop/Inventory/Settings Storage/Profile(other not-channel, not-server related stuff) Process:

  • get and process requests from a player:
  • * e.g.: "show inventory" -> process pulls data from database and sends to player
    
  • * e.g.: "buy item 111" -> process checks if player has enough currency to buy item 111 in the database, subtract the amount he has to pay and deliver item to inventory database table
    
  • when the player joins the server and connects to said channel to submit the saved settings to the player (and accept uploaded, changed settings if player changes them)

Channel Process:

  • able to pull population ratio of all available channels on the server
  • keeping track of all (up to 5500) player and all rooms (worst case: 5500, average case on full populated server: 1040)
  • delivering population ratio of all channels and lists of all existing rooms/matches in the players channel to the player at least every 5 sec or if the player wants to refresh

Room/Match:

  • once the player joins a room he will actually join on a dedicated server instance of the game
  • creating a new room instead of joining an existing one will cause the client to notify the channel process (or another, seperate process) to create a new dedicated server instance
  • starting a match would result in seamless travel on the same server with all connected clients into the map and the game starts
  • dedicated server instances should be able to respond to requests from the channel process about player count, participating players, map settings etc
  • on game end the dedicated server instance submits the result of the match to Shop/Inventory/Settings Storage/Profile Process which then updates the stats in the players profile (and amount of money or w/e)

Soooo. is this possible?

Questions @ Login/Regional Server/Channel Process:
How do I make these services available? REST? Sockets? Suitable Languages/Frameworks?
Is one process enough to care about 5500 players and 5500 rooms ? Or should I split it up into one process per one channel?

Questions @ Room/Match:
What does/can the dedicated server actually calculate and keep track of ?
Is the seemless travel idea from lobby to actual game ideal?

Please tell me everything I am wrong with or which could be solved better!

Thanks for reading this really, really long post and thanks in advance for helpful answers.
(If this isnt really the place to post this and this would be better in the forum/somewhere else pls tell)

Watch some tutorials, mate… Santa can’t give you everything overnight sadly ):

@anonymous_user_db36802d please let me know, you were able to get these, if yes then I’ve struck in same kind of problems.

  1. How to add multiservers.
  2. How to refresh the server at the match end.