Open world game server/client/database architecure

Hey guys! So I was thinking about how making a multiplayer game would be a nice adition to my portifolio. I decided I want to make a open world game (A MMORPG STYLE). However, before you jump out of your seats, I’m planning on playing it with my friends (and some of their friends) so it would by kind of 20-30 players on a scope-reduced game (obviously).

For that matter, I was thinking on how I would make the game architecture to work with server/client and database. I’m posting this here as I could not find any material that would explain this in clear terms (at least not UE4 especific). However, I’ve found some nice info:

https://forums.unrealengine.com/t/rpg-mmo-server-system-for-ue4/80197

I decided to give it a shot. What you think about it? (Pardon my terrible drawing):

In clear terms, I though about having the UE4 client (the player) connecting to a “LoginServer” (a UE4 Server that runs 24/7) on a machine. This LoginServer would comunicate with a “WorldRunner” - a WebAPI server - which then has access to the UE4 Game Servers instance (hosting game maps - I’m thinking about each map could be a region or a city, once player teleports to a different city, it connects to a different UE4 Server) and also has access to the DATABASE.

On a “Login” scenario, the client would inform username/password to “LoginServer”, which then would make a request to “WorldRunner”, which would query the database for player’s info (character, ID, map, location, armor, etc). “WorldRunner” would also create a UE4 Server instance for that requested map, and then return IP, port and player info to LoginServer, which could return it to client!

Also, as an WebAPI, it would have a web version that could manage some admin stuff (connections, players connected, database queries, etc).

On a different scenario (“PlayerConnected” on bottom right of the figure), the UE4 Server hosting the map would also comunicate with “WorldRunner” to update player info (xp gained, level gained, item dropped, etc) on database, keeping track of the player.

And thats it! I would really like some suggestions here. Do you think this is the right path to go? Of course here I’m not considering scalability (as the game would be kind small), but I see as an architecture that might work out.

Would love to hear from you.
Cheers!

1 Like

Wow, the nice topic you’ve put there. I wanted to try to do something like this (as a personal project) but did not have enough material. Thanks for sharing your project, will use your ideas :slight_smile: