Multiple multiplayer online servers on single multiplayer map

Hey guys, I’ve not looked into the multi player server tools yet but would like to have say for example 4 on line servers running just one single map. Idea being the exact same map is on all 4 servers but each of the 4 servers only takes responsibility for 1/4 of the players, with the hopeful end result being able to run a single multi player map with hundreds of players at once. Is this possible, and if not how could we make it possible. Id also like the ability for this to scale well, for massive multi player worlds with 20-30 servers and thousands of players on the same map.

After looking at Blueprint networking, could we modify switch has authority node to also use authority numbering. E.g Have authority 1 be one single dedicated server which could control AI, Switch has authority node 2 for a separate dedicated server that could control replication etc. Or even better the switch has authority node to automaticly support multiple dedicated servers where in the settings you could enter 4 dedicated servers with their own IP’s and set each server controls max players to 16 for example so you could have a 64 player map and each dedicated server only controls the authority of 16 players.

Then when starting each of the dedicated severs we could pass a command line setting for example server authority 1, or server authority 2 etc etc. At which point specific server side work could be easily split among all the servers but the blueprint code would manage which tasks are passed to which servers.

This in theory would allow building you multi player maps as normal with all the normal logic set-ups and have the splitting of work load between as many servers as you wish. Idea being that the whole process could scale to even thousands of players over even hundreds of separate dedicated servers.

Cheers KB.

Hi KingBadger3D,

UE4 is currently geared to get as much performance out of a single server, and being able to fit as many servers on a single box as possible. I think you’ll be pleasantly surprised with the number of actors, and level of control you have to trade performance for fidelity.

Scaling out like you mention (where a single server spans many boxes) is a very interesting concept, but not something that UE4 handles out of the box. It would require quite a bit of surgery.

There are many ways to do something like this, and all of them are quite complicated :slight_smile: I will apologize ahead of time, as this is quite a complicated topic, and this would take a great amount of thought beyond what I could offer you at this time, but I at least want to touch on some high level thoughts.

Your idea about using server id’s could work. There would need to be a central authority who is assigning these server id’s, and then telling the owning servers to take control over the respective actors. Client would first connect to this master server. This master server could then notify the client to connect to the appropriate server that was assigned to that client.

If you wanted to allow clients to travel between servers seamlessly, it would require the ability to move the underlying net connection from one server to another while remaining in the current level. We have the concept of seamless travel, but it doesn’t quite support it at this level, but might not be that bad to make this work.

Other ways I’ve seen this done are clients connect to the main server as normal, but then have secondary connections to servers that control specialized characters like NPC’s, etc.

Almost all of the options would mostly likely require modifying the underlying network driver to handle connections to multiple servers. The client would then need to keep track of which actors belonged to which connections, and be able to route RPC and property updates. This probably isn’t actually that bad, but very hard to visualize without digging in, or spending a bit more time thinking about it.

I know this barely scratches the surface, but I at least wanted to give some high level thoughts!

Hi John, Your response is much appreciated and would like to apologise for my impatience but was getting frustrated. I think a Mix of using Multiple sever Id’s with a central authority for registering clients (maybe also into game use categories) for the owning servers.

Would allowing the servers to have secondary connections directly to each other (being that servers will have better bandwidth constraints then clients, and let the servers directly synchronise player interactions by burst data from one to another with direct replication of game data, also theoretically allowing servers to control specific controls only like AI, Damage, but meaning every server would contain all relevant map data locally stored for client side access through any of the servers connected). Also does the current server data transport use any kind of data compression to speed up burst chunk data transmission?.

Using server ID’s in my eye’s would definitely be needed for interaction with the Blueprint system switch has authority node which would need to be modified to accept Multiple server id’s e.g switch has authority 1, 2, 3 etc.

This way the blueprint would be the same on every server but the server could only take control over authority relevant to it’s ID but still allow each server to only control a fixed number of players per server and would negate having to push the client side connection from one server to another as all servers would sync with each other the map and player data that is run non locally on that server.

Im more than willing to get stuck into this on the code side if you boys are willing, lets things swirl around in the back of your mind for a bit and message me with what you think is the best direction forward. Many many thanks again.

Cheers
KB

Hi KingBadger3D, I was trying to do the same as you were trying to do back in 2014 and I was wondering if you had any luck. Any point in the right direction would be awesome, as I’m a bit lost studying the unreal engine 4 code to try to “move” the connection between servers or creating multiple connections.

Cheers and thank you!