Dedicated Server Performance

Hello community of UE4 :slight_smile:

I got some questions especially on architecture of UE4 networking. Before I dive in development process I need some like engineering type of info and different points of view.

Let’s start. The Dedicated server of UE4 introduced in manner “can be used as you wish” but there is a lot of ideas to use. UE4 huge and has a lot of modules/code base then why we are must to use for our game servers different backends and writing on different languages/services when we are just can use this whole base of UE4 for creating our server backends on top of UE4 infrastructure? That’s why I’ve started this thread. Here we go. We are need deep explanation and some info on that things like do we can organize different kind of server backends on UE4 or no and why.

Does a good idea to use UE4 dedicated server as a server for the pre-lobby store where networking operations between client and server will be buy-sell type mostly with RPC? There is will be no movement of characters and replications like this. How much players can handle UE4 dedicated server in this state? Will be enought memory? I know some guys used dedicated server with about ~100-200 players per instance but I’m talking much more numbers about 1k-10k of players per instance.

Also I would like to know an approach of how to test a dedicated server on the peak performance when connected maximum numbers of players and they are unique for the server. Currently I can’t run tons of clients on the one machine. I need to run like 1k-10k clients. Maybe there is somewhere available an cloud services that allowing such tests about which is I don’t know.

By the way I’ve wrote already three type of servers just by using UE4 modules - login, lobby, session manager for dedicated server instances. Now I want to know how can I go far with UE4 dedicated server.

Any points of view are welcome!

Sorry, for maybe weird language
Thanks for attention

Its a pity that this does not get more attention!
Seeing ark servers going down on dedicated machines with quadcores and about 50 active players is a no-go for all kinds of games which would possibly have more players.

So as a conclusion, the dedicated server is useless for this kind of games.
Im brandnew to UE, but i am sure you can call c++ functions from blueprints, so you can write your own network code - along with your own dedicated server!

I guess MMO starter kit from Marketplace should come handy then? They reported handling 100-200 players on stress test.

200 players without inventory interactions and what so ever, which must also be handled by the server (to avoid conflicts/duplication).
Also keep in mind that players in a real mmo world would spread out very wide, which also increases the active radius on mobs which must get handled in realtime (movement, attacks, broadcasting to nearby players, etc.).

Imho the included dedicated server provides an excellent base to begin with, but it can not be used for anything which requires more performance.
I can be wrong about this, but doesnt the included dedicated server implementation only utilize 2 cores?

A big community test to not only verify but test the capabilities would be awesome!

I don’t think UE4’s networking system is a viable solution for an MMO, it’s generic, and the netcode for an MMO is nowhere near generic.
The MMO stater kit will be useless to you if you want to make a real MMO, afaik the MMO stater kit does not provide any technical solution, it just implements basic mechanics.

Well, I did some investigation by myself and came that dedicated server is not a good idea to use for pre-lobby situations(character customization, online store, etc, inventory etc). But dedicated server showed good result, as i remember around 5k concurrently connected clients(one PlayerController, level empty) sending RPC. everything above 5k will throttle UNetDriver, UNetConnection and cause as a result packets loss. This is because of single threaded architecture of net communication.

I’ve started to develop my own server solutions on C++. First of all I wanted to do it on top of Unreal Engine infrastructure because Engine has a nice modules like Sockets and Networking let us to develop everything we want… but there is NO secure connection support such as SSL/TLS, DTLS etc but OpenSSL in ThirdParty of UE4, dunno what for…

So from game development and instead of programming logic I came to low-level programming like implementing secure sockets. Even can’t reach writing game server logic.

Currently I have almost developed database ORM plugin which I’ve developed on top of UE4 used introspection/reflection for that. Works fine but with drawbacks - can’t use and store MetaData because reflection system ONLY works with EDITOR and stripped out from shipping builds and Programs. It’s comfortable numb to store it with class/struct defination. Maybe Epic Games provide us to have user-defined meta-data of properties in shipping or at least in Program builds?

All of it dissapointed me a lil but stand and fight! Probably one day I’ll share everything… Thanks guys!

I would suggest taking a look at PlayFab, GameSparks, and Photon. They all have plugins/SDKs available for UE4 and I know GameSparks has good pricing for indies (free up to 100k monthly active users), and PlayFab is free for their base stuff.

That’s exactly what I did. I wrote two Programs, one for an “Auth server” and one for a “Realm erver” which basically handles character data, persistent character data storage and sends this data to dedicated ue4 game servers which act as world servers where the gameplay action takes place. This works very nice so far.

I also wrote everything using UE4 socket implementation, because I didn’t want more third party dependencies than needed (and ue4 itself is already a huge dependency, so why not use everything that’s provided there already?) Also, I wanted serialization support for UObjects, basically, to be able to send data from and to the ue4 game servers without another abstraction layer.

Also, sorry for awakening this old thread. :confused: