Redirecting Players to other servers

This idea just randomly came up on the Discord and people got hyped for some reason :smile:

The idea is to provide a way for servers to redirect players to different servers of the same network, ideally without players even noticing this (otherwise we could just bind some button to “connect xxxxxx”). It should be also possible to pass some arbitrary information to the target server as well.

A redirect might be done like this on the serverside:

// to share state, e.g. where the player is to be spawned or to sync e.g. inventory
var someArbitaryData = new byte[] { ... }; // or Dictionary<string, object>
player.SendToServer(myTargetIP, someArbitraryData);

Use cases

  • Big gamemodes (e.g. MMO) that need multiple servers
  • Servers hosting multiple gamemodes (e.g. like Hypixel)
  • Implementing matchmaking

The best example here would be Hypixel. Hypixel currently holds the Guinness world record of “Most Popular Independent Server For a Video Game” by having 64.553 recorded concurrent players in 2017. Of course it is impossible to host that many players on a single server. Once you connect to their main server you are assigned to a lobby server where you can choose a game and join it. It will redirect you to the games server while only showing a short loading screen. A normal player will not notice that they just joined a different server.

Discussion
Some questions that came up during the Discord discussion:

  • Can every server just redirect to any server? If no, some possible solutions are:
    • Simple password or token player.SendToServer(myTargetIP, someArbitraryData, someRedirectPassword)
    • The accepting server might see which server is redirecting the player to it and have some kind of whitelist (like a HTTP referrer)
    • All redirects are denied by default and addons decide how to handle them
  • Will there be some kind of dialog that prompts the player to accept a redirect?
    • Would destroy immersion and be bad UX, ideally players wouldn’t know that they just switched servers
  • How to handle downloading new addons and content
    • Some kind of loading screen will be needed after all
  • Malicious addons could hijack players
  • Will this basically hide gamemodes from the servers list? Will the total player count be displayed on the main server like how it works for Hypixel?
  • Depending on how FP handles the server list (e.g. categorized by gamemode) the idea of a server hosting multiple gamemodes might not make sense and make it harder to find such servers
  • If you can join some servers only by getting redirected to them, there should be an option to hide them from the servers list

This would be cool especially to make bigger “maps” / playable areas.

I hope matchmaking is all done through the main menu UI though, like any game, CSGO for instance. If possible.

1 Like

That kind of matchmaking would be across different servers / networks with different game styles, rules, etc. The matchmaking described here would be across the same network so it would be always the same experience no matter what server you get assigned to

1 Like

I don’t see why it shouldn’t be able to, keeping in mind the following point:

Yes, absolutely. Partially because of addons doing weird (malicious) things and partially because you won’t be able to avoid loading screens (It’s still source, it still has to load the next map/initialize the gamemode unlike Minecraft where the bulk of the loading happens while starting the game and the world is streamed in as you go) and I highly doubt players are going to appreciate suddenly being kicked into one without any kind of prompt.

If immersion is a big enough problem then give the prompt a checkbox that lets people always accept or always reject a redirect attempt based on the server’s IP.

See this post for my idea on this.

It shouldn’t, Hypixel can do what they’re doing because there is no definitive server list for Minecraft like there is for Garry’s Mod and (presumably) Sandbox and the number they report to the client doesn’t matter.

Servers should only report their true player count, any ‘hidden’ servers should just be listed in a different way so that players can still verify that there are actual players on those servers. (Again, see this post for how I’d tackle something like this)

2 Likes

This misses the whole point of it. You didn’t give any reasons why the player needs to know or even accept that they are switching servers either.

1 Like

Usually gamemodes don’t want players to suddenly leave their server unless it to another one of their servers, I don’t see any situation where the player would have to agree.

1 Like

This is something I’m interested in for some ideas I’ve got, mainly instancing and having a large sharded map managed by different servers.

These would not be able to function properly if the user had to accept a connection redirection manually, especially if I’m using and intermediate server to bounce players / use as a loading area.

As for things like fake player numbers and trying to keep track / verify them, it seems kinda pointless and just a measuring contest.

If we do getting malicious addons that try to leverage the connection feature. Well, it’s up to the server owners to just remove or change that addon. We could always have a log of what plug-in performs the connection action (like console output) and leave it at that. I don’t see why we should restrict things because people can use it maliciously, otherwise we should ban making variables because you can just overload the user’s RAM.

3 Likes

You shouldn’t be limited to connecting to a single server: it would be great if it supports connecting to multiple servers at once in the future.

Leave it up to user code to handle packets from different sources but it could open up easier cross server transitions when we can load the next area preemptively, or offload some code off to different servers.

1 Like

I see why you think you want multiple servers connecting at once, but realistically that would be a gigantic mess on both sides.

You can easily do seamless transitions with a bit of server-server communication and handling on the client side. Look at how destiny 2 does their map transitions for example, even though entire areas are seamless, you only connect to one instance server at a time.

2 Likes

I’m sure you could have a server for every core on your CPU and that wouldn’t make much of a mess on the client’s side.
As for the server, you now have 60 players playing and 400 other players that are technically connected but playing on another server, you could just not send any packages to them but in the end I think Source 2 still allows up to 255 players so you’d have to completely redo the whole system.

2 Likes

Of course, I’m not saying that multiple servers on one system is a bad idea:- It’s actually one of the best when trying to do an instanced map!

I’m saying if you have your client connected to severs A and B at the same time, then deciding which packets from both server you should be using: that’s going to be a mess.

Considering we cannot host multiple maps on one server instance, you need to use at least one server per map. Nothing is stoping you from running every server on the same machine! And depending how you implement the handoff, it’s super scaleable.

Take an MMO game mode for example, you could have hundreds of one-player severs because they’re in all in their own dungeon.

2 Likes

If we cant connect to multiple servers at once we will end up using proxy servers to route traffic from multiple sources. If people are going to work around the “connected to a single server at once” then may as well add built in support.

If someone wants to use that advanced feature then they are likely smart enough to figure out how to handle it on the client.

1 Like

I think I should also point out that Hypixel sometimes has more concurrent players than GMod. This is only possible because of this redirection / proxying stuff. I believe making it possible to have such large servers would also have a positive impact on the overall player count.

5 Likes

Gmod will have this implemented in the next update!

3 Likes