> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/contributor/contributor-pt/comunicacoes/overview.md).

# Visão geral

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

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

* Chat de texto e voz
* Atualizações de posição conforme os jogadores se movem ao redor
* Atualizações do avatar quando os jogadores mudam sua aparência

{% hint style="info" %}
Você pode ver o protocolo comms em ação e experimentá-lo usando o código aberto [Comms Station](https://decentraland.github.io/comms-station/).
{% endhint %}

Como a maior parte dessa funcionalidade exige transmitir mensagens para todos os jogadores próximos, elas são automaticamente agrupadas em clusters baseados em proximidade chamados *ilhas*. Cada player é atribuído a uma única ilha por vez, o que muda conforme viajam pelo mundo e se movem em relação aos outros.

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

```mermaid
flowchart LR
    subgraph Realm
        Players["Jogadores<br/>⭐⭐⭐⭐⭐⭐⭐⭐⭐"]
        Archipelago["Archipelago"]
        
        subgraph Ilhas
            Island1["Ilha 1<br/>⭐⭐⭐⭐"]
            Island2["Ilha 2<br/>⭐⭐⚪⚪"]
            IslandN["Ilha n<br/>⭐⭐⭐⚪"]
        end
        
        Players --> Archipelago
        Archipelago --> Island1
        Archipelago --> Island2
        Archipelago --> IslandN
    end
```

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

Isso significa que, além do [Archipelago](https://github.com/decentraland/docs/tree/main/contributor/communications/archipelago/README.md) protocolo, os clients devem implementar um número de *transportes*, cada um encapsulando um dos backends suportados em uma interface unificada.

### Ciclo de vida do cliente <a href="#lifecycle" id="lifecycle"></a>

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

1. **Selecionar um realm**: obtenha uma URI para o [Archipelago](https://github.com/decentraland/docs/tree/main/contributor/communications/archipelago/README.md) serviço.
2. **Entrar no Archipelago**: abra uma conexão persistente com o serviço.
3. **Obter uma (re)atribuição de ilha**: reporte a posição atual e obtenha uma URI específica da ilha.
4. **Conectar um transporte**: abra uma segunda conexão com o backend específico da ilha.
5. **Repetir**: continue passando pelas etapas 3 e 4, reportando novas posições periodicamente.

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

```mermaid
sequenceDiagram
    participant Archipelago
    participant Client
    participant IslandBackend as Backend da Ilha
    
    Note over Client: Conectar ao Archipelago
    Client->>Archipelago: Autenticar
    Archipelago->>Client: Aceitar
    
    Note over Client: Reportar posição
    Client->>Archipelago: Reportar posição
    Archipelago->>Client: Atribuir ilha
    
    Note over Client: Conectar à ilha
    Client->>IslandBackend: Conectar transporte
    Client->>IslandBackend: Autenticar
    IslandBackend->>Client: Aceitar
    
    Note over Client,IslandBackend: Trocar mensagens
    Client->>IslandBackend: Mensagens de jogadores…
    IslandBackend->>Client: Mensagens de jogadores…
    
    Note over Client: Atualizar posição
    Client->>Archipelago: Atualizar posição
    Archipelago->>Client: Reatribuir ilha
    
    Note over Client: Desconectar da ilha antiga
    Client->>IslandBackend: Desconectar transporte
    
    Note over Archipelago,IslandBackend: Repetir ciclo
```

### Conexões

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

Vá para a [Transportes](https://github.com/decentraland/docs/tree/main/contributor/communications/transports/README.md) ou [Archipelago](https://github.com/decentraland/docs/tree/main/contributor/communications/archipelago/README.md) seções para saber mais, ou uma página específica de transporte 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 na [serializada em JSON](https://github.com/decentraland/docs/tree/main/contributor/auth/authchain/README.md) .

Acesse a [Archipelago](https://github.com/decentraland/docs/tree/main/contributor/communications/archipelago/README.md) página ou veja um transporte específico para saber mais sobre os fluxos de autenticação.

### Ilhas

Ilhas são grupos altamente dinâmicos de jogadores que podem transmitir mensagens entre si, criados e mantidos por [Archipelago](https://github.com/decentraland/docs/tree/main/contributor/communications/archipelago/README.md) em resposta aos seus movimentos no mundo.

Não há uma área predefinida ou ponto central para uma ilha. Elas não são características geográficas estáveis, apenas associações temporárias de jogadores próximos. Se uma ilha puder ser considerada como cobrindo uma região, isso é apenas porque seus membros estão atualmente espalhados por essa zona.

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

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

O fluxo para ser atribuído a uma ilha e entrar nela é detalhado na [Archipelago](https://github.com/decentraland/docs/tree/main/contributor/communications/archipelago/README.md) .

### Mensagens

As mensagens no protocolo comms são blobs binários serializados usando [protocol buffers](https://github.com/protocolbuffers/protobuf), envoltos em uma [Packet](https://github.com/decentraland/docs/tree/main/contributor/communications/messages/README.md#Packet) estrutura.

{% hint style="info" %}
Ao usar a palavra *message* no contexto de comms, estaremos sempre nos referindo ao protocolo de mensagens binárias, e não às mensagens de chat trocadas entre players.
{% endhint %}

Há vários tipos diferentes de mensagens, para uma variedade de fluxos de interação em tempo real. Acesse a [mensagens](https://github.com/decentraland/docs/tree/main/contributor/communications/messages/README.md) seção para saber mais.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/contributor/contributor-pt/comunicacoes/overview.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
