We’re looking into adding a “max latency” setting on the client, so that someone is only matched on a server that’s under their specified max ping.
Eg. “I only want to get into a match which will be placed on a server under 100ms ping to me”
Currently we’re using expansions to relax the built-in maxLatency parameter over time, starting at 100ms and going up around 200ms over a few minutes (to prioritise games with lower latency, but still allow players to match with those further away from them eventually). This is good for players which don’t mind a laggier match, but we’ve heard from others who’d rather queue for longer in case others in their region start searching than be placed on a server that’s far away.
Is there a way base the expansion values on attributes that the player has passed up themselves? Even if there needs to be an attribute per step (eg. maxPingStepOne: 120, maxLatencyStepTwo: 160)?
In the meantime, it seems like we’d basically need to calculate which regions are under the player’s desired max latency, and pass that white list of regions up as a player attribute, then do a set intersection to only match players with one of those regions in common (similar to what we do for platforms).
It’s a bit of a weird one, because this sort of needs to be done at the matchmaking level rather than the queue level, but the queue is the real source of truth for what regions we have fleets available in.
I might go ahead and implement the set intersection anyway, but am interested if there’s a more elegant solution.
Edit: An additional question! Although we’re only relaxing our latency rule’s maxLatency to 200ms, we’re still seeing players from the other side of the world matched together. This seems to be possible because they each have some regions in common under 200ms, and so pass the maxLatency check. The problem is that the match will then be placed on a server, and the queue doesn’t seem to take into account the value of maxLatency at whatever expansion they were matched, so just picks a fleet with the lowest average latency to all players. If there are multiple players in one region then the average latency to that region can be pulled down enough to place on a fleet there, even though that fleet was over someone else’s maxLatency. I’ve now set our queue’s latency policy to max 200ms, which is our “last” expansion, though there could still be edge cases where players are matched before they’ve hit the last expansion.
I could potentially set up the queue to spend a few seconds searching for a fleet below each expansion’s latency rule maxValue (there should always be available game sessions on all fleet regions), though feels like there could be some edge cases I haven’t thought of so am reluctant to do something more complex like that.