WebSocket¶
Protocolo para comunicação bidirecional e persistente em tempo real entre cliente e servidor.
Conceito¶
O WebSocket permite que cliente e servidor troquem mensagens em full-duplex pela mesma conexão TCP, sem precisar abrir uma nova conexão HTTP a cada evento.
Como funciona (resumo)¶
- Cliente inicia requisição HTTP com cabeçalhos de upgrade.
- Servidor responde com
101 Switching Protocols. - A conexão vira WebSocket e permanece aberta.
- Cliente e servidor enviam mensagens a qualquer momento.
Relação com redes¶
- Opera sobre TCP, herdando confiabilidade, ordenação e controle de fluxo.
- Reduz overhead de conexões repetidas (vs polling intenso).
- Pode sofrer impacto de NAT/proxy/firewall em conexões ociosas.
- Usa heartbeat (
ping/pong) para manter sessão ativa e detectar queda.
Vantagens¶
- Baixa latência para atualização contínua.
- Comunicação realmente bidirecional.
- Boa experiência para aplicações interativas.
Desvantagens¶
- Maior complexidade operacional e de escala.
- Exige estratégia de distribuição de estado (pub/sub, broker, etc.).
- Precisa de observabilidade e gestão de conexões simultâneas.
Casos de uso¶
- Chat em tempo real.
- Colaboração simultânea (edição compartilhada).
- Dashboards com streaming de métricas.
- Jogos multiplayer e sistemas de alertas instantâneos.
Segurança¶
- Preferir
wss://(TLS). - Autenticar no handshake e revalidar permissões por canal.
- Limitar taxa de mensagens por cliente.
- Encerrar sessões inválidas/ociosas por política.
Arquitetura em projetos¶
- Para escalar horizontalmente, usar backplane/pub-sub (ex.: Redis/NATS/Kafka).
- Evitar estado crítico preso em um único nó.
- Aplicar reconexão com backoff no cliente.
Quando escolher WebSocket¶
Use quando há requisito de tempo real contínuo e interação frequente entre cliente e servidor.
Nota relacionada¶
- Compare com Webhooks para integrações orientadas a eventos entre sistemas.