I’m calling it. Making a phone to communicate with other people in the universe…
What I am doing to overcome this is have a server check if there is a server designated to handle matchmaking, and if not then it sets the designated matchmaking server to the current server and begins handling all requests there.
The only downside to doing this that I can see is that you will need to be checking and making sure you are not going over the limits given, and you will also need to incorporate this with datastores (for storing what server is currently handling matchmaking) and in the event the datastores go down and the server closes before the datastores come back up, it could result in the game not allowing another server to be designated for matchmaking.
You could overcome that by checking how long it takes to get a response from the matchmaking server, if it is over a certain time then it marks that server as ‘Inactive’ and moves on to another server.
You still have to think about
- rate limits
- what happens if 2 or more servers publish that they are going to be the dedicated matchmaking server
- what happens when that dedicated server crashes
- how would other servers know if they are the dedicated matchmaking server?
I just feel like Universe Scripts would handle all of the use cases this feature has without all the headaches but sadly it most likely won’t be released.
So, I take it this means I won’t have to use my stupidly complex datastore system I made earlier to do this. I thank you kindly, engineers, you’ve done us all a big favor.
The documentation is misleading – this is really a limit around total number of subscriptions per topic. We will clarify it.
It’s pretty clear that the 10k universe limit is temporary while in beta. Wouldn’t bash on that too much until it’s in full release.
Edit:
It’s per topic, interesting. That’s a lot less limiting overall.
I can see very useful applications for this like a cross-server marketplaces. Really cool update! Far better than datastores already.
I agree Universe Scripts will make this much easier, and I feel like with the release of this feature they can finally start getting Universe Scripts pushed out (think about it, if they needed to get the networking system done before getting the actual system out then this would make sense)
Back to the topic, you would just check to make sure there is no active server (either by the previously active server marking itself inactive from the game shutting down, or other servers detection a 95+ second delay before getting a response from the dedicated server. I say 95 second in case the matchmaking server sees itself reaching the limits and starts adding a bit of head room for other servers requests.) If there is no active server than it starts running the code to subscribe itself to the Matchmaking Topics and the game runs as such.
I believe when you subscribe it returns an RBXScriptConnection, Correct me if I’m wrong, in which case you could disconnect as soon as the server is being moved to another dedicated server.
Edit: You would want to also wait before creating all the subscriptions while setting a datastore saying a server is ready to be setup, so multiple servers don’t try setting up all at once.
I’ve been thinking about the most efficient ways to do this, and I feel like you would probably be better off sending a ping from the matchmaking server every 10-20 seconds to let other servers know if it is still active, if it seems to not be pinging then the servers will know to create a new dedicated server.
While messing around with it, I’ve noticed that you can’t test it in Studio and that it actually throws an error when in Studio. That’s a bit limiting for serious usage of this because you have to test in-production and wrap it in a check to see if it’s in Studio, but it’s understandable given it’s in beta.
The message size limit is a bit strict though. Is there any chance this will be increased either before or after the beta’s conclusion? For strings with non-ascii characters, 1kB isn’t that many characters, and with tables especially you can reach the limit quickly.
Just tried a mock up and realized, how are servers going to teleport the players from other servers…
Service for EZ Battle-Royale system.
Do topics exist in all places in the universe or are they limited to one place?
Are strings passed through this service null-terminated? Are there any other odd encoding quirks to worry about?
While waiting to be teleported, create a subscription on the server the player is in that will wait for the proper teleportation data (Place ID, Server ID, etc.)
Make sure to disconnect the subscription for when the player leaves the session, and after the player has been teleported (Shouldn’t affect the dedicated server, hopefully)
I assume all places, since there are limits for a universe as a whole. Although I have not tested this yet.
It’s also not possible to do Cross Server chat for EVERYONE to chat because of filtering restrictions. There is no current way using Chat or TextService that you can see if 2 players are allowed to chat because of their settings due to them having to be in the same server for this to work.
I also believe that matchmaking is something listed under the “Universe Scripts” on the roadmap. I can see Universe Scripts being more useful than this and I hope this isn’t the replacement of it and that the wait will be worth it
This is a great update. been wanting something like this for awhile
You still have to make sure that the user you are showing the message to hasn’t blocked them or something preventing them from seeing the message normally.
This is not correct. You can use FilterStringAsync (the TextService version) and CanUsersChatAsync, all you need is the UserId of both of the players.
I have done this and it errored out.