Pular para o conteúdo principal
Este tópico descreve como usar o SmartMatch para combinar jogadores em um jogo multiplayer. Fluxograma: o processo de matchmaking do SmartMatch Criando uma sessão de tíquete de partida e um tíquete de partida Definindo atributos de matchmaking na sessão e nos jogadores Formando a partida Mantendo o tíquete de partida Reutilizando a sessão de jogo como sessão de tíquete de partida Excluindo o tíquete de partida Realizando o matchmaking para jogos usando o XBOX Compute Confira também

Fluxograma: o processo de matchmaking do SmartMatch

O fluxograma a seguir ilustra o processo de matchmaking do SmartMatch. Imagem de um fluxograma de matchmaking que ilustra o processo de matchmaking do SmartMatch Voltar ao início deste tópico.

Criando uma sessão de tíquete de partida e um tíquete de partida

Antes de o processo de matchmaking começar, um “batedor” de matchmaking configura uma sessão de tíquete de partida para representar o grupo de pessoas que desejam entrar juntas no matchmaking. Todos os jogadores desse grupo ingressam na sessão usando XblMultiplayerSessionJoin. Depois que a sessão de tíquete é criada e preenchida com jogadores, o título envia a sessão ao serviço de matchmaking usando XblMatchmakingCreateMatchTicketAsync. Esse método cria um tíquete de partida que representa a sessão de tíquete e, em seguida, atualiza o campo /servers/matchmaking/properties/system/status da sessão de tíquete para searching. Para obter mais informações, consulte a seção Criar um tíquete de partida no tópico Tarefas de multiplayer. A resposta do método de criação do tíquete de partida é um objeto XblCreateMatchTicketResponse. A resposta contém o ID do tíquete de partida. É um GUID que pode ser usado para cancelar o matchmaking excluindo o tíquete. A resposta também contém um tempo médio de espera do hopper, que pode ser usado para definir as expectativas dos jogadores. Voltar ao início deste tópico.

Definindo atributos de matchmaking na sessão e nos jogadores

Ao enviar uma sessão ao matchmaking, o título pode definir atributos que o serviço de matchmaking usa para agrupar a sessão com outras sessões. O título pode especificar atributos no nível do tíquete ou no nível de cada membro.

Definindo atributos de matchmaking no nível do tíquete de partida

O título envia atributos no nível do tíquete de partida no parâmetro ticketAttributesJson do método XblMatchmakingCreateMatchTicketAsync. Os atributos especificados no nível do tíquete substituem os mesmos atributos especificados no nível de cada membro.

Definindo atributos de matchmaking no nível de cada membro

O título especifica atributos por membro em cada membro da sessão de tíquete de partida. Esses atributos são definidos chamando XblMultiplayerSessionCurrentUserSetCustomPropertyJson com o nome de propriedade matchAttrs. Essa chamada coloca os atributos no campo /members/{index}/properties/custom/matchAttrs de cada jogador da sessão de tíquete. O processo de matchmaking “achata” os atributos por membro, cada um em um único atributo no nível do tíquete, com base no método flatten especificado para esse atributo na configuração dos serviços do XBOX do hopper. Isso é configurado no Partner Center. Voltar ao início deste tópico.

Formando a partida

Com a sessão de tíquete e o tíquete de partida configurados, o serviço de matchmaking combina a sessão de tíquete representada com outras sessões de tíquete que representam outros grupos e, em seguida, cria ou identifica uma sessão de destino da partida. O serviço também cria reservas para os jogadores combinados na sessão de destino e, em seguida, marca as sessões de tíquete como combinadas. O Multiplayer Session Directory (MPSD) notifica o título sobre essa alteração na sessão de tíquete. Em seguida, o título deve tomar medidas para inicializar a sessão de destino e confirmar que há jogadores suficientes presentes. O título realiza verificações de qualidade de serviço (QoS) para garantir que os jogadores consigam se conectar uns aos outros. Se a inicialização ou a QoS falhar, o título marca a sessão de tíquete para reenvio ao matchmaking, para que outro grupo possa ser encontrado. Para obter mais informações, consulte Inicialização da sessão de destino e QoS. Durante a atividade de partida, as seguintes alterações são feitas nos objetos JSON da sessão.
  • Campo /servers/matchmaking/properties/system/status definido como found
  • Campo /servers/matchmaking/properties/system/targetSessionRef definido como a sessão de destino
  • Campo /members/{index}/properties/custom/matchAttrs de cada sessão de tíquete copiado para o campo /members/{index}/constants/custom/matchmakingResult/playerAttrs
  • Para cada jogador, atributos do tíquete copiados do campo ticketAttributes do tíquete de partida para o campo /members/{index}/constants/custom/matchmakingResult/ticketAttrs
Voltar ao início deste tópico.

Mantendo o tíquete de partida

O serviço de matchmaking usa um instantâneo da sessão de tíquete no momento em que o tíquete de partida é criado para a sessão. Como resultado, se algum jogador entrar ou sair da sessão de tíquete, o título deverá usar o serviço de matchmaking para excluir e depois recriar o tíquete de partida. Voltar ao início deste tópico.

Reutilizando a sessão de jogo como sessão de tíquete de partida

Duas sessões com preserveSession definido como Always não podem ser combinadas entre si, porque não podem ser mescladas. O fluxo de matchmaking usado pelo título deve levar isso em consideração.
Um título pode reutilizar uma sessão de jogo existente como sessão de tíquete de partida para encontrar mais jogadores para ingressar em um jogo que já está em andamento. Para habilitar isso, o título deve criar o tíquete de partida chamando XblMatchmakingCreateMatchTicketAsync com o parâmetro preserveSession definido como XblPreserveSessionMode::Always. Em seguida, o serviço de matchmaking garante que a sessão existente usada para o tíquete seja preservada durante todo o processo de matchmaking e se torne a sessão de destino resultante. Voltar ao início deste tópico.

Excluindo o tíquete de partida

Para excluir o tíquete de partida, o título chama XblMatchmakingDeleteMatchTicketAsync. Excluir o tíquete:
  1. Interrompe o matchmaking para os jogadores da sessão de tíquete.
  2. Atualiza o campo /servers/matchmaking/properties/system/status da sessão de tíquete para canceled.
Voltar ao início deste tópico.

Realizando o matchmaking para jogos usando o XBOX Compute

A seguir estão as etapas de alto nível realizadas para que um jogador seja combinado em um jogo baseado no XBOX Compute. Um fluxo semelhante deve se aplicar a jogos hospedados por terceiros.
  1. O batedor cria uma sessão de tíquete para representar o grupo. Essa sessão contém uma lista de possíveis datacenters que ficam na configuração da sessão em /constants/system/measurementServerAddresses. Ela vem do modelo de sessão, se a lista de datacenters for estática, ou do cliente que a grava na criação da sessão depois de obtê-la primeiro do XBOX Compute. Essa sessão também contém os valores gsiSetId, gameVariantId e maxAllowedPlayers no objeto targetSessionConstants/custom/gameServerPlatform.
  2. Todos os outros jogadores do grupo ingressam na sessão de tíquete.
  3. Todos os membros do grupo baixam os valores measurementServerAddresses do objeto /constants/system da sessão de tíquete, fazem ping neles usando a API da plataforma e, em seguida, carregam na sessão uma lista ordenada de datacenters preferidos, conforme definido em /members/{index}/properties/system/serverMeasurements.
    [!NOTE] O título pode definir e recuperar os valores measurementServerAddresses da sessão usando o método XblMultiplayerSessionConstantsSetMeasurementServerAddressesJson e XblMultiplayerSessionConstants::MeasurementServerAddressesJson.
  4. O batedor chama XblMatchmakingCreateMatchTicketAsync, passando uma referência à sessão de tíquete.
    [!NOTE] Se os objetos da sessão de tíquete tiverem constantes incompatíveis, o método de criação do tíquete poderá não ter êxito. Isso pode ser evitado adicionando uma regra MUST ao hopper, para impedir a combinação com jogadores que tenham constantes incompatíveis.
    Se XblMatchTicketDetailsResponse::PreserveSession estiver definido como Never, o serviço de matchmaking copiará as medições de servidor de cada membro para a representação interna do tíquete. Ele achata as medições de servidor dos membros do tíquete em uma única coleção de medições de servidor para o tíquete, que é armazenada na representação interna do tíquete como um atributo de tíquete special. Se XblMatchTicketDetailsResponse::PreserveSession estiver definido como Always, as medições de servidor não serão usadas. Em vez disso, o serviço de matchmaking copia o valor /properties/system/matchmaking/serverConnectionString da sessão para a representação interna do tíquete como uma coleção serverMeasurements de tamanho 1 com latência zero.
  5. O serviço de matchmaking combina a sessão de tíquete com outras, que representam outros grupos, levando em conta as coleções de medições de servidor. O serviço tenta combinar o grupo com outros grupos que tenham os mesmos datacenters altamente preferidos.
  6. Depois que um grupo combinado é encontrado, o serviço de matchmaking cria ou identifica uma sessão de destino e adiciona todos os jogadores das sessões de tíquete combinadas. O serviço grava as medições de servidor achatadas finais do grupo combinado em /properties/system/serverConnectionStringCandidates. Ele grava as medições de servidor enviadas originalmente por cada membro recém-adicionado à sessão de destino em /members/{index}/constants/system/matchmakingResult/serverMeasurements.
  7. Todos os jogadores realizam a inicialização na sessão de destino, conforme mencionado anteriormente. No entanto, como os jogadores se conectarão ao XBOX Compute, eles não realizam QoS entre si para confirmar a conectividade.
  8. Todos os jogadores jogam.
Voltar ao início deste tópico.

Confira também

Visão geral do matchmaking
Última modificação em 8 de outubro de 2026