We’ve been looking at the new plugin regarding the multi-server proxy, which looks interesting to us, depending on what its actual scope and functionality is aimed at.
As I understood the code:
The client connects to a special proxy node which acts just like a traditional dedicated server, as far as the client is concerned. However, it’s actually proxying for multiple true dedicated servers. Players can be migrated from one server to another, but the client connection stays consistent; they don’t really know they’ve been migrated.
The plugin only has some of the logic needed for this. There’s at least one compile-time macro needed in the engine code as well.
It’s unclear if migration is implemented, or if it is, when a migration would occur. Is this something that needs to be added by us? Or is there something (either there now, or in progress) which determines when players should migrate?
I saw that servers can notify other servers of things; for example when levels are loaded/unloaded. Is there any other state which is shared out of the box?
Is the idea that an entire “mmorpg world” would be one massive, world-partitioned map and we’d run a thousand dedicated servers, feeding the proxies? Or is it targeting a more restricted area, but allow many more people in it?
Hi,
Migration is implemented (for instance, see RemoteObjectTransfer.h/.cpp), but determining when something should be migrated is something that would need to be set up in the project. Also, remote object support would need to be enabled (UE_WITH_REMOTE_OBJECT_HANDLE), which is not supported in the editor.
As for shared state, no other game state is shared by default. Your project would need to set up custom RPCs on the server beacons for anything else that needed to be shared.
Finally, there isn’t any specific experience being targeted by the plugin, and it’s not required for use on a large map with spatially partitioned servers. The plugin provides a way for RPCs to be routed between servers, so how those servers work together and how those RPCs function is ultimately up to the project.
Thanks,
Alex
Regarding the plugin being very experimental and in development: completely understood.
Out of curiosity, do you have rough numbers regarding how many dedicated servers you’ve tried running and how many proxies were used for that given the number of players?
Is there a natural approximate max reasonable count of players on a proxy?
Is the load on the dedicated server about the same per “owned player” as when it’s not in a multi-server set? (I’m thinking it is because it is still doing the networking deltas for every player, it’s just sending them to the proxy to be forwarded, right?
Thanks for your response. I have a couple follow-ups:
Do all the dedicated servers for a particular proxy set need to load the same map? It seems like that to me: the client will have been told what map to load, and the layer load/unload delegates seem to show that.
From the comments, it seemed as if all the servers knew about all the clients (through a controller, IIRC). Is that correct? Is it possible for a server who is not the owning server to send an RPC to a player?
Hi,
In our development and testing of the plugin, we have been using the same map across all the proxies and servers; however, this isn’t an architectural requirement. At this time, we don’t have any definitive plans for a solution around supporting different maps.
As for sending RPCs, the proxy will forward RPCs to the client from that client’s primary server. If you wanted a non-owning server to send a RPC to a client, you’d need to either migrate that player to the other server or have the non-owning server send the RPC to the primary server, at which point the primary server could send the RPC to the player. Please note though that the plugin is still very experimental and early in development, so it’s possible that this may change in the future.
Thanks,
Alex
Hi,
At this time, we are unable to share any information on our internal testing of the plugin, and until the plugin has seen more development, testing, and optimization, we can’t provide any estimates as to how many players/servers/proxies can be generally supported.
As for the dedicated server load, you are correct that it should be roughly the same per-player when compared to a standard server setup; although, there is an additional cost associated with sending RPCs between the servers. If the number of RPCs being sent between servers increases with the number of players on the server, then this could increase the per-player performance cost.
Thanks,
Alex