Visão geral da formação de partidas
Quando você envia um tíquete para uma fila, o serviço de matchmaking o coloca junto com outros tíquetes em espera. O serviço executa continuamente um loop de partidas que tenta agrupar tíquetes compatíveis em partidas. Veja o que acontece em cada etapa:- Os tíquetes expirados são removidos. Os tíquetes que excedem o tempo limite de
GiveUpAfterSecondssão cancelados. - Os tíquetes são ordenados por tempo de espera: O tíquete que está esperando há mais tempo se torna a semente, ou ponto de partida, de uma possível partida.
- Os candidatos são classificados por compatibilidade: Cada tíquete restante recebe uma pontuação de distância com base no quanto seus atributos se alinham com o tíquete semente, de acordo com as regras da fila.
- Um grupo é formado de forma gulosa: Começando pelos candidatos mais próximos, os tíquetes são adicionados ao grupo um de cada vez, até
MaxMatchSize. - Cada adição é validada: À medida que um tíquete é adicionado, cada regra verifica se o candidato ainda é compatível com o grupo formado até então. Se alguma regra o rejeitar, o candidato será ignorado.
- O grupo completo é validado: Quando um grupo atinge pelo menos
MinMatchSize, uma passagem de validação final confirma se o grupo atende a todas as regras. Se passar, uma partida será criada. - Retrocesso: Se nenhum grupo válido puder ser formado, o serviço removerá o último tíquete adicionado e tentará o próximo candidato. Esse processo explora agrupamentos alternativos antes de desistir da semente atual.
O algoritmo prioriza os tíquetes que estão esperando há mais tempo. Essa prioridade garante que os jogadores que esperam mais sejam os primeiros a receber partidas.
Como as regras influenciam a correspondência
As regras têm duas finalidades durante a formação de partidas: filtragem e ordenação.Filtragem
Uma regra pode impedir que um tíquete entre em um grupo. Por exemplo, umaStringEqualityRule na versão de build do jogo rejeita qualquer tíquete cujo build não corresponda ao build do grupo. O serviço de matchmaking verifica a filtragem sempre que considera um candidato. Não é apenas uma verificação única no início.
Ordenação (distância)
As regras também contribuem com uma pontuação de distância que determina quais candidatos são testados primeiro. Uma distância menor significa maior compatibilidade.- Um tíquete com um valor de atributo idêntico geralmente tem distância 0.
- Um tíquete no limite do intervalo permitido de uma regra tem distância próxima de 1.
- Um tíquete fora do intervalo permitido é filtrado (distância efetivamente infinita).
Validação
Algumas restrições só podem ser verificadas depois que um grupo completo é formado. Por exemplo, as regras de equilíbrio de equipes (TeamDifferenceRule, TeamSizeBalanceRule) precisam ver o grupo completo antes de poderem avaliar se as equipes estão equilibradas. Essas regras são executadas como uma etapa de validação final.
Expansão e relaxamento
Quando um tíquete aguarda, as regras relaxam suas restrições para ampliar a busca. Dois mecanismos controlam esse processo:- Expansão: Uma regra ajusta gradualmente seu limite ao longo do tempo. Por exemplo, uma
DifferenceRulecom um limite de habilidade de 0,2 pode se expandir em 0,1 a cada 5 segundos, permitindo, por fim, uma diferença de 0,5. - Segundos até se tornar opcional: Após um tempo configurado, a regra para completamente de filtrar. A regra ainda contribui para a ordenação (distância), mas não bloqueia mais partidas.
O relaxamento não significa que a qualidade da partida seja ignorada. Mesmo quando uma regra se torna opcional, ela ainda contribui com distância para a etapa de ordenação. Os candidatos que atendem à regra são testados antes dos que não atendem.
Dimensionamento e particionamento
Quando uma fila recebe um grande volume de tíquetes, o serviço particiona os tíquetes em grupos que avalia de forma independente. O particionamento usa atributos de regras que dividem naturalmente a população. Por exemplo, umaStringEqualityRule no modo de jogo cria limites de partição bem definidos.
À medida que a carga diminui, as partições se mesclam novamente. Esse processo fornece ao serviço um conjunto maior de candidatos e melhora a qualidade das partidas.
Para obter mais detalhes sobre como projetar filas que se dimensionam bem, confira Dimensionamento do matchmaking.
