We’re looking to launch with GameLift for our dedicated servers in a few months, and are hoping to have a few regions around the world.
We’re planning to have our own web service that makes the calls to the GameLift API (as recommended), but have got a proof of concept working by calling FlexMatch directly from the game client (with a single region/queue/alias/fleet).
After reading through the documentation (and trawling the forums) I’m still a bit unclear as to what the best practice is for setting up the actual GameLift side of things is though.
Would you be able to walk me through an ideal configuration for the following example requirements? Eg.:
We want to have fleets in at least 2 or 3 regions, eg. one in Virginia, one in Frankfurt and one in Sydney.
We have a single game client that we deploy worldwide via eg. Steam (and maybe consoles)
- We expose our own identity/matchmaking web service to game clients, which will keep track of players’ MMR, rank etc. and make requests to FlexMatch
I assume this could be hosted in North America using eg. Lambda and DynamoDB
The game has 2 “game modes” that you can matchmake for, eg. Solo and Teams
1. In terms of matchmaking –
What sort of setup of queues/aliases etc. would you need to make that work?
Would you need a matchmaking configuration for each game mode in each region?
And if so, would that mean our web service would need to be sent the latency of the client for each region, and create a ticket for them on the appropriate region’s matchmaking configuration?
I know that Queues involve the concept of latency, but it doesn’t seem like that’d actually be very useful if there can only be one queue per region, and you need to tie a queue to a matchmaking configuration?
FlexMatch also incorporates latency per region, so maybe I’m misunderstanding, and these features are more for games with fleets in multiple nearby regions, despite matchmaking from a “main” region?
2. In terms of deploying game updates –
Ideally if someone has the game running when we release an update, then they should be able to finish the match they’re in, but when they try to enter matchmaking again the game will inform them that their game client is out of date and to restart it. When close it and try to re-open, Steam will force them to update.
I imagine this sort of setup would involve spinning up a new fleet for the new build in each region, while keeping the old fleet up until all matches have finished and thus all new players are on the new fleet.
If you had an alias per “branch”, eg. Live and Development, then when you update the game client you point the Live alias to the new build’s fleet (and repeat for each region)?
We’d then need to do the “version checks” in our web service, instead of using something like Terminal aliases?
So when we have a new release ready, we’d need to upload the build to each region of GameLift we want to have fleets in (eg. ap-southeast-2, us-east-1)
We currently have a tool that uploads our builds to a single region automatically as part of our CI pipeline, so would we just need to extend that to upload to more regions?
Are there any tools to keep the other stuff in sync across regions, particularly the matchmaking configurations etc.? Or would we just need to script things ourselves to remove human error?
3. In terms of security –
Say our web service only exposed a few basic methods to game clients, eg. StartMatchmaking, DescribeMatchmaking, CancelMatchmaking.
Clients would make a request to StartMatchmaking, and pass through enough info for us to authenticate that they own the game (eg. through Steam web API), and we could return the raw FlexMatch ticket id.
If we’re polling every 5 seconds to DescribeMatchmaking for the status of the ticket, would we need to re-authorise again for each request?
Or since ticket id’s are basically guid’s then no-one could really guess one, and we may as well save on execution time?
Sorry for the long post, I’d really appreciate even if you can only reply to a few things