Carregando
0xC0Lição 13 de 13

Projete um sistema de chat

Entregue mensagens em tempo real, em ordem, a usuários que entram e saem.

20 min Questionário com 6 perguntas
Ao final desta lição, você saberá
  • Escolher um transporte em tempo real e rotear mensagens entre servidores de conexão.
  • Ordenar as mensagens de uma conversa com números de sequência.
  • Entregar a usuários offline e acompanhar a presença.

Requisitos. Chats individuais e em grupos pequenos, entrega em tempo real, histórico de mensagens em vários dispositivos, presença online e entrega para usuários que estão offline. Não funcionais: baixa latência, mensagens nunca podem se perder depois de confirmadas, e a ordem precisa ser consistente dentro de uma conversa.

Conexões, roteamento e armazenamento

  • Transporte: os clientes mantêm um WebSocket persistente, para o servidor poder enviar mensagens na hora. Long polling é uma alternativa de reserva.
  • Gateways com estado: os servidores de WebSocket mantêm conexões abertas, então têm estado. Um registro de sessões (por exemplo, no Redis) mapeia cada usuário online para o gateway que segura a conexão dele. Mantenha a lógica de negócio em serviços separados, sem estado.
  • Roteamento: o serviço de chat persiste a mensagem, descobre o gateway de cada destinatário e publica nele (via pub/sub). Destinatários offline recebem uma notificação push.
  • Armazenamento: as mensagens são particionadas por conversation_id e ordenadas por um número de sequência por conversa - um encaixe natural para um banco de colunas largas.

Um exemplo: um cliente com as mensagens 1, 2, 4 e 5 percebe que falta a 3 e pede essa mensagem ao servidor.

Os números de sequência permitem que os clientes detectem buracos e sincronizem ao reconectar, pedindo “as mensagens depois da sequência N”. Quem atribui os números é o servidor, porque os relógios dos clientes não concordam. O servidor armazena a mensagem antes de confirmá-la ao remetente, então uma mensagem confirmada sobrevive a uma queda. A presença usa heartbeats: um usuário que perde vários heartbeats é marcado como offline. Em chats de grupo, o serviço faz o fan-out de cada mensagem para o gateway de cada membro.

Prática: acompanhe uma mensagem

Experimente

Até 15 XP

Leve uma mensagem de ponta a ponta

Conseguir fazer isso em voz alta é o coração da resposta na entrevista. Preveja cada etapa antes de ela acontecer.

Mensagem 1 de 6Previsões 0/0
Ana
Gateway A
Serviço de chat
Gateway B
Bo

Prática: depure uma reconexão

Experimente

Até 15 XP

Leia um log de sincronização do cliente

Um usuário diz que algumas mensagens sumiram depois que o trem dele saiu de um túnel. Clique na linha que explica o que aconteceu.

Rodada 1 de 1: Um buraco na sequênciaPontuação 0/0

Onde o cliente deveria ter percebido que precisava sincronizar?

Log do cliente para a conversa 8841

Juntando tudo: uma simulação de entrevista

Experimente

Até 15 XP

Apresente um projeto em voz alta

Explique o seu projeto como faria na sala e percorra uma mensagem de ponta a ponta.

Pergunta 1

“Projete um app de chat como os que você usa todo dia.”

Avalia: Entrega em tempo real

A pergunta fica oculta até você começar. Responda em voz alta, como faria na entrevista.

Principais conclusões

  • Conexões persistentes dão estado aos gateways; um registro mapeia usuários para gateways.

  • Armazene antes de confirmar, e ordene por números de sequência atribuídos pelo servidor.

  • Usuários offline recebem notificações push e sincronizam as mensagens perdidas ao reconectar.

Quiz da aula

6 perguntas · aprovação com 5 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…