How to make an Efficient Server List System (with Party System)?

I am in the process of re-doing one of my development group’s games, World War Tycoon. The game has 2 playable places under the same game, one for two player (the default place) and one for single player. Players pick whether they want to stay in the default place (that being two player) or teleport to a random server in the single player place instead.

I’ve been thinking about making a custom server list system that players can view in the default place to see servers of the single-player game that they can teleport to.
I’ve looked around YouTube to see some common methods that people use, like in this video..
However, I have a few issues/concerns I want to address before beginning this system:

  1. The method in the video says to use MessagingService. I’d imagine, with the game scaled up and many servers are at hand, this would lead to issues with reliability of getting information about ALL possible servers, right?

  2. Going off of #2, I’ve seen some people mention that using MemoryStoreService. I don’t have any experience with this, and in my brief research on it, it seems like it would be more complicated (but more reliable) to use than MessagingService. Which is more efficient, and if it is MemoryStoreService, how do I use it in this case?

  3. Whichever service method I use, a concern I have it how many servers should I show? World War Tycoon has had peak CCUs of ~3,000 players before, and today single-player servers hold about 1/3 of the game’s CCU. Scale this up to the game’s height (or more!), and that’s 1,000 people across 12-player servers across close to 85 (or more) servers. I think it would be quite inefficient and overwhelming (and a PITA to make look nice with UI) to show a player ALL these servers. I’ve been thinking a good idea would be to show the player(s) only 5-10 servers at a time, and they can “refresh” to find new ones. Is this a good idea?

  4. Going off of #4, I also want to create a party/lobby/room system, where players can create a party of their friends (and whoever else) that they would all be teleported to the same single-player server. I would have it so that anytime someone joins your party, the server list would refresh to find servers that could fit however many people are in your party (I’d likely have it account for an extra slot or two just to be safe). How would I do this?

  5. Despite all this, World War Tycoon has functioned without a lobby/server list/custom matchmaking system for single player servers for quite some time now (almost 2 years now), and few people have ever really asked for it. Given that this is a tycoon game, and that players can simply follow their friend(s) into single player servers after their friend(s) have been put in a random single-player server, is making this system (especially for release of the re-do) really worth it?

3 Likes

If the options you listed don’t seem feasible, it might be best to go with a different route entirely. You could generate a random alphanumeric code for each server, and have clients type in the code. If you feel the need to make a full server browser, there’s pros and cons to each approach. I would recommend identifying your goal with the server system. Do you want players to join servers based on the player count, age, region, etc. If you go with messaging service, you could decide to only publish a message when a new player has joined and it’s been over a certain time limit since the last update. There are loads of ways to do a system like this, and refining your use case would be a good first step before you are able to decide what option would be more efficient.

2 Likes

I haven’t indicated what is and isn’t “feasible,” I am on the fence about how to approach this - hence my post…

IMO this is a really old-school way about handling this. It would be by far the simplest way about handling it - a player is in a server, finds the server code, gives it to his or her friend, and said friend punches it in to the server selector and gets teleported.

However, this would be pretty redundant given that ROBLOX’s follow system is pretty good; this isn’t the early 2000’s where this sort of joining system was common (I remember it being a thing on Pirates of the Caribbean all the way back in 2007), and it would also be useless for players who are playing solo, but want to see what options for servers they have (as of now, there is no way to check via ROBLOX’s systems what the server list for sub placed under a game).

I thought I was clear with my intentions, but re-reading my post, it seems that I was not. My goal is to have a system similar to what you see under a game’s server section on ROBLOX, like seen below:

Something relatively simple that would show how many players are in each server, with some sort of way to show the players inside the server’s profile pictures. Maybe a way for players to find servers with x or less players in them.

Searching for server based on age, region, etc. will be more difficult to do, and if the game doesn’t have triple digit CCU, I doubt players will have many options in regards to those options.

I guess I could make it so servers can only be “pinged” once every 30 or 60 seconds, but that could maybe cause an issue where if there aren’t enough servers but a ton of players “pinging” for potential servers, there wouldn’t be many results - unless I have this debounce be player specific.

With Messaging Service I was referring to the opposite approach. Have each server regularly update the others with its current player list. You could just send a list of the IDs, the receiving server could then forward those to clients who open the browser. If you have a lot of single player servers, it would probably be best to go with that approach as the count wouldn’t change very often. That would allow you to update more efficiently and have an event system, rather than consistently grabbing all of the data with memory stores. It would also mean that you don’t need to fully clear the lists on the client; just make the necessary updates when they occur. Memory Service can be useful, but if you want a list of all of the IDs and you have an incredibly large amount of servers, I would recommend Messaging Service. The rates are pretty lenient: MessagingService | Documentation - Roblox Creator Hub.