Visão Geral

O sistema de comunicações da Decentraland, ou simplesmente comms, é o protocolo de mensagens em tempo real que gerencia a interação entre jogadores em um realm.

Algumas dessas interações são iniciadas pelos jogadores, outras são gerenciadas automaticamente pelos clients nos bastidores. Alguns exemplos:

  • Chat de texto e voz

  • Atualizações de posição conforme os jogadores se movem

  • Atualizações de avatar quando os jogadores mudam sua aparência

circle-info

Você pode ver o protocolo de comms em ação e experimentá-lo usando o código aberto Comms Stationarrow-up-right.

Como a maior parte dessa funcionalidade requer o broadcast de mensagens para todos os jogadores próximos, elas são automaticamente agrupadas em clusters baseados na proximidade chamados islands. Cada jogador é atribuído a uma única island por vez, que muda à medida que ele viaja pelo world e se move em relação aos outros.

O serviço de realm que gerencia e atribui jogadores às islands é chamado Archipelago. Ele se encarrega de criar islands conforme necessário, manter sua população em um número razoável e reatribuir dinamicamente os jogadores em resposta aos seus movimentos.

spinner

Quando atribuído a uma island, os clients recebem um URI específico da island para se conectar ao backend real que irá retransmitir mensagens entre eles. Essa conexão dura até que o Archipelago reatribua o client para uma island diferente.

Isso significa que, além do Archipelagoarrow-up-right protocol transports, cada um empacotando um dos backends suportados em uma interface unificada.

Ciclo de vida do client

O ciclo de vida de um comms client pode ser resumido em alguns passos:

  1. Selecionar um realm: obter um URI para o Archipelagoarrow-up-right service.

  2. Ingressar no Archipelago: abrir uma conexão persistente com o service.

  3. Obter uma (re)atribuição de island: reportar a posição atual e obter um URI específico da island.

  4. Conectar um transport: abrir uma segunda conexão com o backend específico da island.

  5. Repetir: continuar passando pelos passos 3 e 4, reportando periodicamente novas posições.

Quando o client encerra sua sessão, ele simplesmente se desconecta do serviço Archipelago. Ele será removido automaticamente de sua island atual.

spinner

Conexões

As conexões de comms são principalmente baseadas em websockets, embora alguns transports possam usar outras estratégias.

Vá para a Transportsarrow-up-right ou Archipelagoarrow-up-right seções para saber mais, ou uma página de transport específica para detalhes sobre ele.

Autenticação

As conexões com comms são autenticadas fazendo com que os clients assinem um desafio fornecido pelo server, usando o esquema descrito em auth_chainarrow-up-right seção.

Vá para a Archipelagoarrow-up-right página ou veja um transport específico para saber mais sobre os fluxos de autenticação.

Ilhas

Islands são grupos altamente dinâmicos de jogadores que podem transmitir mensagens entre si, criados e mantidos pelo Archipelagoarrow-up-right em resposta aos seus movimentos no world.

Não há uma área predefinida ou ponto central para uma island. Elas não são características geográficas estáveis, apenas associações temporárias de jogadores próximos. Se for possível dizer que uma island cobre uma região, é apenas porque seus membros estão atualmente espalhados nessa zona.

Pode haver zero islands em uma região sem jogadores, e várias islands sobrepostas em áreas densamente povoadas, onde atribuir todos ao mesmo grupo tornaria o broadcast em tempo real impossível.

Cada server na rede Decentraland pode configurar a população máxima da island e a distância na qual os jogadores são considerados próximos. Por padrão, islands podem hospedar até 100 players dentro de 100 metros uns dos outros.

O fluxo para ser atribuído a uma island e ingressar nela está detalhado em Archipelagoarrow-up-right seção.

Mensagens

As mensagens no protocol de comms são blobs binários serializados usando protocol buffersarrow-up-right , envolvidos em uma Pacotearrow-up-right estrutura.

circle-info

Ao usar a palavra message no contexto de comms, estaremos sempre nos referindo ao protocolo de mensagens binárias, não às mensagens de chat trocadas entre jogadores.

Existem vários tipos diferentes de mensagem, para uma variedade de fluxos de interação em tempo real. Vá para a mensagensarrow-up-right seção para saber mais.

Atualizado