Theoretical/Practical Networking Limits?

Hello All,

I am delving into Unreal for a massive multiplayer environment.

As I understand things, Unreal uses a Client-Server design which makes sense and of that, there is supposed to be a way to effectively cluster many servers together to extend a single “host” for massively horizontal scaling.

In the Unreal Launcher Marketplace, I ran across “Dynamic Servers Sub-system” which is supposed to allow for huge scaling, but I am wondering (as a thought experiment) as to what would it take for a cluster of Unreal servers to support many thousands of users in a massive world that extends across many servers?

I may not be asking this correctly, but I could envision a world that starts with one map on one server and extends to be larger or more maps as more servers join but are all under the same world. Effectively a distributed Unreal world.

Any thoughts on this?

And if so, then how might you go about setting something like this up.

Thanks in advance

This may be possible by having your Unreal servers share the same database, and they fetch or push different information depending on what changes in the game world. You could have a bunch of load balanced servers and send players to whatever has the least amount of clients. The secret sauce will be what information you serialize and store in the database, so that its quickly retrieved and how the game will support multiple servers modifying the same location in the world at the same time.

You would have to do some kubernetes magic to instantiate all the hosts and connect them all to the same ingress point, the DevSecOps work alone would be very time consuming. I hope you have a team of people and not an individual! lol.

Thanks for the reply on this and I am mostly investigating what would be required to build up a small external server in either C++ or Golang (or a few others) which I can use reasonably well.

For me it’s the question and challenge as to what is needed in an Unreal Engine multiplayer game. I did start trying to look at the LyraGame (UE5) project which might give some hints but am still getting use to how Blueprints work, and they appear to be more like a visual programming language so should not be too hard to get a handle on.

What I am actually interested in for this area is to see if I can call an external library (DLL, or .so) from an Unreal example for which I think should absolutely be possible in that Unreal is mainly in C++. If Ican do that then I can perhaps just develop my own network shim library and not have to use the built-in library.

Just some thoughts and Thanks again

To extend the scale and scope of standard UE Dedicated servers, you’ll need external back end support. There’s several projects out there to assist with massive multiplayer in Unreal, but one that I’ve enjoyed following is the Open World Server project: http://www.sabredartstudios.com/

By using an API and several support servers, the scale of server instances is only limited by budget… of course changing the UE server source to increase the number of players per server is an entirely different beast.

Thanks and I will see if that is an option, but it looks interesting from what I just looked at so far.

Hello,

I have been researching and came across DSSLite and Nakama Server as well, but thought that there was a way to tell a default UE5 dedicated server to connect to other UE5 dedicated servers, but cannot seem to locate that information anymore.

Perhaps, I misread that a while back, but it seemed that you could have many Dedicated Servers connected together and scaling a game just by adding more to the cluster.

Any thoughts on this?

You can open a standard TCP socket connection between an Unreal dedicated server and any other type of server (Unreal or not). You’d need to send a header w/message length, but other than than just send byte data as needed. There is a lot of documentation about socket connections on just about every programming resource site. Unreal has a TCP socket system, and there are Epic marketplace plugins that build on top of it, that could be used to talk between servers.

A simple C# / nodeJS or python API could be used to manage dedicated server instances. That way the socket communication / http API communication between your control backend would talk to the dedicated servers directly and manage them as zones, or shards or whatever you want to call them. A dedicated server would have a player hit a specific trigger, and the zone would pass whatever unique player id and location system you’re using to this backend server, and the backend would spin up a new instance. This would be a “loading screen” setup.

The other option is to use inter-server communication (sockets are low latency) and proxy actors for NPCs and Players near the edges, until the player passed the server bounds and is moved to the next server. It would be quite complex to do this, and probably require engine code alteration to make it look close to smooth without any hitches.