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
Você pode ver o protocolo de comms em ação e experimentá-lo usando o código aberto Comms Station.
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.
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 Archipelago 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:
Selecionar um realm: obter um URI para o Archipelago service.
Ingressar no Archipelago: abrir uma conexão persistente com o service.
Obter uma (re)atribuição de island: reportar a posição atual e obter um URI específico da island.
Conectar um transport: abrir uma segunda conexão com o backend específico da island.
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.
Conexões
As conexões de comms são principalmente baseadas em websockets, embora alguns transports possam usar outras estratégias.
Vá para a Transports ou Archipelago 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_chain seção.
Vá para a Archipelago 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 Archipelago 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 Archipelago seção.
Mensagens
As mensagens no protocol de comms são blobs binários serializados usando protocol buffers , envolvidos em uma Pacote estrutura.
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 mensagens seção para saber mais.
Atualizado