I am at a point where I have set up a SNS topic for GameLift, and I have subscribed a SQS queue to the topic and am able to get messages via reading from the queue. However, I am now wondering, what is the difference between doing this and calling DescribeMatchmaking to get the status of my matchmaking tickets? I have read on previous posts that it is bad to call DescribeMatchmaking at high volumes and that it should only be used in local testing. I am wondering why that is? Does DescribeMatchmaking put strain on the GameLift fleets/resources? And also what is the recommend approach then for notifying the client about a match/ticket’s status? Because right now, I am currently deciding between having the client call a Lambda-function-integrated-API every 10 seconds that either
Reads from an SQS queue that is subscribed to a SNS topic that is receiving GameLift event notifications
Reads from a database like DynamoDb that gets the SNS topic messages from a Lambda function that is subscribed to the topic.
Lastly, any examples would be very helpful. Thank you in advance.
I don’t work for GameLift so I can’t refer to the why of DescribeMatchmaking, I do know that GameLift restricts the calls per second on this API.
Quoting from this thread
2. The client could just poll, but we don’t recommend this for when your game launches. There are throttling limits that GameLift will enforce on your game if across all clients they are polling at too high a TPS. For large games that could have hundreds or thousands of clients in matchmaking simultaneously, you could exceed your polling limits quickly. Hence why we don’t recommend you launch with this set up."
(thread actually has a bunch of useful information - but it links to this great blog post):
The suggestion is that you have something listening to the SNS topic that updates some storage (memcache, dyanmodb etc). Clients call that something to find out about their specifics wrt to matchmaking. Or your thing/service has a notification mechanism to call your clients to action / pass connection information.
Lots of ways you could build this but it depends on if you have other requirements or other things you are integrating with (ie how you are managing player authentication etc).
Sorry if thats all a bit vague but GameLift as service leaves this up to developers (which may not be ideal). Hoping that GameLif team will provide a little more direction in this space (we’ll see what happens) or somethings to make this part of the integration easier.