Pular para o conteúdo principal
Este tópico descreve como o serviço Multiplayer Session Directory (MPSD) permite que os títulos compartilhem as informações básicas necessárias para conectar um grupo de usuários. O MPSD se coordena com o shell e o sistema operacional do console quando convites são enviados e aceitos e quando os usuários entram por meio de um gamercard. O MPSD centraliza os metadados do sistema multijogador de um jogo em vários clientes. O MPSD garante que a funcionalidade da sessão seja sincronizada e consistente. O MPSD é um serviço que opera na nuvem dos serviços XBOX. Ele é encapsulado pelas funções XblMultiplayer. Este tópico aborda o seguinte:

Sessões do MPSD

Uma sessão do MPSD é identificada por seu XblMultiplayerSessionHandle e representa um cenário no qual um ou mais usuários jogam um jogo. Uma sessão é armazenada pelo MPSD como um documento JSON seguro na nuvem dos serviços XBOX. Especificamente, uma sessão do MPSD tem as características a seguir.
  • É criada e gerenciada pelos títulos.
  • Tem um URI exclusivo. Para obter mais informações, veja URIs do Session Directory.
  • Permite a conectividade entre os usuários, chamados de membros da sessão.
  • Armazena dados que viabilizam o jogo, como atributos por membro, configurações do jogo, informações de inicialização e informações do servidor de jogo.
Toda sessão contém os identificadores de usuário XBOX (XUIDs) dos jogadores e os dados de endereço de associação segura de dispositivos. O MPSD oferece suporte a vários tipos de sessões para configurar diversos tipos de jogos multijogador, incluindo as variações a seguir. Voltar ao início deste tópico.

Tratamento de notificações de alteração e detecção de desconexão do MPSD

Os clientes se conectam ao MPSD usando o web socket do serviço Real-Time Activity (RTA). A conexão é usada para fazer o seguinte:
  • Enviar notificações breves (shoulder taps) quando ocorrem alterações na sessão, com base nas assinaturas de eventos iniciadas pelos títulos.
  • Detectar desconexões de usuários.
  • Definir usuários como inativos e, em seguida, removê-los da sessão, com base na detecção de desconexão.

Fazer conexões de usuários

A biblioteca XBOX Services API (XSAPI) gerencia a conexão entre o cliente e o MPSD.
  1. O título chama XblMultiplayerSetSubscriptionsEnabled. Esse método informa à XSAPI que o cliente pretende usar uma conexão RTA para fins de multijogador.
  2. Quando o título faz sua primeira chamada a XblMultiplayerWriteSessionAsync ou XblMultiplayerWriteSessionByHandleAsync, com o usuário atual definido no estado Active, uma conexão é criada e vinculada ao MPSD.
Para habilitar as notificações de sessão e detectar desconexões, o modelo de sessão deve definir connectionRequiredForActiveMembers como true.

Assinar alterações na sessão

O MPSD usa um shoulder tap como uma notificação leve de que algo de interesse foi alterado. Quando as assinaturas estão habilitadas, o título pode assinar shoulder taps de alterações na sessão com uma chamada a XblMultiplayerSessionSetSessionChangeSubscription. Para obter mais informações, veja a seção Assinar notificações de alteração de sessão do MPSD no tópico Tarefas de multijogador.

Tratar shoulder taps

Quando uma alteração em uma sessão corresponde à assinatura do título para essa sessão, o MPSD notifica o título sobre a alteração usando o manipulador XblMultiplayerSessionChangedHandler. O título deve então recuperar a sessão, comparar a versão recuperada da sessão com a exibição anterior em cache e tomar a ação apropriada.

Tratar notificações de alterações no estado da conexão

O título pode ser notificado sobre alterações na integridade da conexão com o MPSD. Dois eventos sinalizam essas alterações.
  • Manipulador XblMultiplayerSessionSubscriptionLostHandler: disparado quando a conexão do título com o MPSD por meio do serviço RTA é perdida. Quando esse evento ocorre, o título deve encerrar o multijogador.
  • Manipulador XblRealTimeActivityConnectionStateChangeHandler: disparado em uma alteração temporária na integridade da conexão do título com o serviço RTA. O título não é obrigado a tomar nenhuma ação ao receber esse evento, mas o evento pode ser útil para fins de diagnóstico.

Desconectar clientes

Os clientes do seu título se desconectam do MPSD quando o título desabilita as notificações com uma chamada a XblMultiplayerSetSubscriptionsEnabled. Pouco depois dessa chamada, o manipulador XblMultiplayerSessionSubscriptionLostHandler é disparado, indicando que um cliente se desconectou do MPSD.
Em versões anteriores do multijogador, os títulos chamavam XblRealTimeActivityDeactivate para se desconectar do serviço RTA. No serviço Multiplayer de 2015, esse método não tem efeito. A desconexão ocorre automaticamente depois que XblMultiplayerSetSubscriptionsEnabled é chamado com o valor false e se não houver usuários da conexão de web socket, como uma assinatura do serviço RTA para o serviço de Presença.

Detecção de desconexão

O MPSD usa seu recurso de detecção de desconexão para descobrir rapidamente quando um usuário se desconecta de forma inesperada. As causas de uma desconexão inesperada incluem falha na rede de um jogador ou travamento de um título. O MPSD altera o estado do jogador desconectado de Active para Inactive e notifica os outros membros da sessão sobre a alteração, conforme apropriado, com base nas assinaturas dos membros na sessão.

Tratar reconexões do RTA

A XSAPI tenta se reconectar ao RTA em caso de desconexões e reenviar as assinaturas do RTA. (Para obter mais informações, veja Práticas recomendadas para o serviço RTA.) Reenviar a assinatura RTA de multijogador atualiza o ID de conexão usado para associar um usuário em uma sessão do MPSD a uma conexão RTA do cliente. A XSAPI notifica o título de que o ID de conexão do MPSD foi alterado por meio de XblMultiplayerAddConnectionIdChangedHandler. Dentro do retorno de chamada, o título deve gravar o novo ID de conexão na sessão do MPSD. O novo ID de conexão pode ser gravado na sessão chamando XblMultiplayerSessionCurrentUserSetStatus e, em seguida, gravando na sessão com uma chamada a XblMultiplayerWriteSessionAsync.
Voltar ao início deste tópico.

Identificadores do MPSD para sessões

Um identificador de sessão do MPSD é uma referência abstrata e imutável a uma sessão que também pode conter dados tipados adicionais. Ele é semelhante a um identificador de arquivo. Todos os identificadores têm um ID de identificador (GUID) e uma referência completa de sessão que consiste em um ID de configuração de serviço (SCID), um modelo de sessão e um nome de sessão. Um identificador não pode ser atualizado, mas pode ser criado, lido e excluído.
Um identificador pode apontar para uma sessão que não existe. Criar um identificador usando um nome de sessão inexistente não faz com que uma nova sessão seja criada.

Tipos de identificador

O Multiplayer de 2015 oferece suporte a identificadores de convite e identificadores de atividade.

Identificadores de convite

Um identificador de convite representa um convite para um usuário específico. Os dados específicos do tipo incluem o usuário de origem, o usuário de destino e uma cadeia de contexto que descreve o convite; por exemplo, um modo de jogo específico. Um identificador de convite concede acesso de leitura e gravação a uma sessão aberta. Se a sessão estiver fechada, o identificador concederá acesso somente leitura à sessão.
O MPSD pode criar um convite mesmo que a sessão esteja cheia ou fechada.

Criar um identificador de convite

Para criar um identificador de convite, o título chama XblMultiplayerSendInvitesAsync. Esse método envia um convite aos usuários especificados em uma notificação na qual os destinatários podem agir para aceitar o convite.

Criar um identificador de atividade

Para criar um identificador de atividade, o título chama XblMultiplayerSetActivityAsync. O MPSD define o novo ID de identificador como a atividade vinculada do membro da sessão. Se houver uma atividade vinculada anterior, o MPSD excluirá o identificador correspondente. Quando o membro ativo fica inativo ou sai da sessão, o MPSD exclui o identificador da atividade vinculada.

Usar identificadores

O título usa identificadores quando um usuário aceita um convite (identificador de convite) e quando um usuário entra na atividade atual de um amigo (identificador de atividade). Em ambos os casos, o título deve executar as ações a seguir.
  1. Obter o ID do identificador nos parâmetros de ativação do título.
  2. Criar um objeto de sessão do MPSD local e, em seguida, entrar nele como ativo.
  3. Gravar a sessão, passando o identificador apropriado.
Voltar ao início deste tópico.

Sincronização de atualizações de sessão

Uma sessão é um recurso compartilhado que pode ser criado ou atualizado por qualquer um de seus membros. Como resultado, podem ocorrer gravações conflitantes. Isso pode levar a resultados inesperados se, por exemplo, um título substituir as alterações feitas por outro título. A abordagem do MPSD para resolver esses conflitos é oferecer suporte à simultaneidade otimista e a um padrão de leitura-modificação-gravação. A sincronização das atualizações de sessão pelo MPSD usa dois padrões de implementação de alto nível relacionados.
  • Um árbitro atualiza as partes compartilhadas da sessão. Se a sua implementação envolver um único árbitro, você poderá evitar o uso de atualizações sincronizadas para a maioria das operações de gravação. O título pode evitar a sincronização nos casos a seguir.
    • Qualquer atualização que o árbitro faça nas partes compartilhadas da sessão, a menos que estejam relacionadas à comunicação da identidade do árbitro
    • Qualquer atualização que um título faça na área de membros da sessão
    [!NOTE] Embora os tipos de atualização mencionados anteriormente não precisem de sincronização, ainda é importante sincronizar quaisquer atualizações na propriedade XblMultiplayerSessionProperties::HostDeviceToken. Essa propriedade é usada para comunicar a identidade do árbitro, por exemplo, como parte da migração de árbitro.
  • Todos os clientes atualizam as partes compartilhadas da sessão. Nesse caso, todas as atualizações nas partes compartilhadas da sessão devem ser sincronizadas. No entanto, os títulos ainda podem gravar em suas próprias áreas de membro sem sincronização.

Atualizar a sincronização da sessão usando a API Multiplayer

Os métodos da API multijogador a seguir implementam a simultaneidade otimista. Cada método de gravação aceita um valor XblMultiplayerSessionWriteMode. Passar o valor SynchronizedUpdate usa a simultaneidade otimista para as atualizações. Outros valores da enumeração ajudam a resolver possíveis conflitos na criação inicial de uma sessão. Qualquer gravação em uma parte da sessão do MPSD que possa ser gravada por outro título deve usar uma atualização sincronizada. No entanto, nem todas as gravações precisam ser protegidas. Se o seu título tentar gravar o objeto de sessão local no MPSD usando um dos métodos de gravação de sessão, ele poderá receber um código de status HTTP/412. Nesse caso, ele deverá atualizar a cópia local emitindo uma chamada a XblMultiplayerGetSessionAsync para obter a versão mais recente da sessão no servidor antes de tentar a gravação novamente. Caso contrário, o documento de sessão local continuará contendo os dados incorretos e as chamadas para gravar a sessão continuarão falhando.
Quando o título chama um dos métodos de gravação de sessão, uma versão atualizada da sessão pode ser retornada. Se uma versão atualizada da sessão for retornada, o título deverá substituir sua cópia local em cache pela nova versão de forma thread-safe.

Atualizar a sincronização da sessão usando a API REST Multiplayer

O MPSD oferece suporte à simultaneidade otimista nas atualizações de sessão por meio da funcionalidade REST, usando o cabeçalho HTTP “if-match” com configurações de ETag e o padrão de leitura-modificação-gravação. O ETag passado na solicitação de gravação deve ser aquele que o MPSD retornou na solicitação de leitura anterior. Voltar ao início deste tópico.

Chamar o MPSD

O título pode acessar o MPSD das maneiras a seguir para usar o sistema multijogador e o matchmaking.
  • Recomendamos que você use a API multijogador, que contém classes que atuam como wrappers para a funcionalidade RESTful. Para obter mais informações, veja as funções com o prefixo XblMultiplayer. Para o matchmaking do SmartMatch, use a API de matchmaking, representada pelas funções com o prefixo XblMatchmaking.
  • Use chamadas HTTP padrão diretas para as APIs REST de multijogador e matchmaking incluídas na referência RESTful dos serviços XBOX. Os URIs aplicáveis são descritos nas seções URIs do Session Directory (para multijogador) e URIs de matchmaking (para matchmaking). Os objetos JSON relacionados são descritos na seção Referência de objetos JavaScript Object Notation (JSON).

Usar a API Multiplayer para chamar o MPSD

Recomendamos que você chame o MPSD usando as APIs de multijogador e matchmaking da XSAPI.
Os exemplos foram escritos usando as APIs de multijogador e matchmaking e os outros elementos da XSAPI.
Usar código wrapper para a funcionalidade REST subjacente permite uma abordagem mais tradicional de uso de métodos de API do lado do cliente, sem a necessidade de lidar com o tráfego HTTP em cada chamada.

Usar a API REST Multiplayer para interagir com o MPSD

O título, ou seu serviço, pode usar chamadas HTTP padrão para a API REST de multijogador e a API REST de matchmaking. Ao usar a funcionalidade REST diretamente, o chamador emite chamadas DELETE, PUT, POST e GET nos URIs do Session Directory para a maioria das ações. Em uma solicitação PUT, o corpo da solicitação é mesclado à sessão existente. Se não houver uma sessão existente, o corpo da solicitação será usado para criar uma nova sessão, juntamente com o modelo de sessão armazenado no Partner Center. Todos os campos são opcionais, e apenas as diferenças precisam ser especificadas. Portanto, {} é uma solicitação PUT válida sem nenhuma diferença. Para executar uma solicitação PUT hipotética que retorne o resultado da mesclagem sem afetar a cópia oficial da sessão no servidor, você pode acrescentar a cadeia de consulta ?nocommit=true à solicitação PUT. As solicitações e respostas dos métodos das APIs REST de multijogador e matchmaking são documentos JSON. Para ver a estrutura de solicitação de uma sessão multijogador, veja MultiplayerSessionRequest (JSON). Uma estrutura de resposta associada é mostrada em MultiplayerSession (JSON). A estrutura de resposta organiza os membros da sessão como uma lista vinculada e preenche outras propriedades somente leitura da sessão e de seus membros.

Consultar sessões e modelos de sessão (REST)

Seus títulos podem consultar informações de sessão nos níveis de configuração de serviço e de modelo de sessão. Esta seção descreve consultas que usam a API REST de multijogador.

Consultar informações básicas da sessão

Você pode configurar consultas de informações básicas da sessão usando os URIs do Session Directory e de matchmaking. O resultado de uma consulta é uma matriz JSON de referências de sessão, com alguns dados da sessão incluídos embutidos. Por padrão, uma consulta recupera até 100 sessões não privadas.
Toda consulta deve incluir um filtro de palavra-chave, um filtro de XUID ou ambos.

Consultar modelos de sessão

Para recuperar a lista de modelos de sessão do SCID e os detalhes de um modelo de sessão específico, use o método GET para um dos URIs a seguir.
  • /serviceconfigs//sessiontemplates
  • /serviceconfigs//sessiontemplates/

Consultar o estado da sessão

Para consultar o estado da sessão, use o método GET para um dos URIs a seguir.
  • /serviceconfigs//sessions
  • /serviceconfigs//sessiontemplates//sessions
Voltar ao início deste tópico.

Multiplayer Session Explorer

O Multiplayer Session Explorer é uma ferramenta integrada ao MPSD para navegar por sessões, modelos de sessão e cadeias de caracteres de localização. A ferramenta deve ser usada somente em sandboxes de desenvolvimento.

Acessar o Multiplayer Session Explorer

Para usar a ferramenta, você precisa estar conectado. Sua navegação fica limitada às sessões que têm o usuário conectado como membro.
Para acessar o Multiplayer Session Explorer, abra o navegador no seu console XBOX One (ou posterior), pressione o botão View e insira https://sessiondirectory.xboxlive.com/debug na caixa Address.
Você receberá um código de status HTTP/404 se tentar acessar a ferramenta na sandbox RETAIL. Para obter mais informações sobre esse código, veja Códigos de status de sessões multijogador.

Abrir a página principal

  1. Abra a página principal da ferramenta. Ela exibe o contexto de segurança (usuário conectado e sandbox) e uma lista de SCIDs na sandbox.
  2. Pressione o botão Menu para fixar esta página na Página Inicial para que você não precise digitar o URI novamente.

Exibir as sessões e os modelos disponíveis

  1. Selecione um SCID na ferramenta para exibir uma lista de sessões desse SCID que incluem o usuário conectado como membro.
  2. Nessa mesma página, você pode selecionar o SCID e exibir os modelos de sessão e as cadeias de caracteres de localização na configuração de serviço do SCID. Esses itens são ingeridos por meio do Partner Center.

Exibir o conteúdo completo de uma sessão

No Multiplayer Session Explorer, selecione o nome de uma sessão para exibir o conteúdo completo da sessão correspondente. A sessão mostrada pelo MPSD pode ser diferente da resposta a um método GET padrão para o URI da sessão pelos motivos a seguir.
  • A chamada GET pode estar usando uma versão de contrato mais antiga no cabeçalho X-Xbl-Contract-Version. O Multiplayer Session Explorer sempre exibe a sessão usando a versão de contrato mais atual.
  • Quando uma sessão é solicitada normalmente via GET, transformações e efeitos colaterais podem ser disparados, como tempos limite expirados. O Multiplayer Session Explorer exibe um instantâneo da sessão como ela está armazenada, sem executar nenhuma lógica, transformação ou efeito colateral.
  • O campo de objeto JSON nextTimer não está presente nas sessões do MPSD porque é calculado ao mesmo tempo que os efeitos colaterais.
Voltar ao início deste tópico.

Veja também

Voltar ao início deste tópico.
Última modificação em 20 de outubro de 2026