WebSocket permite comunicação bidirecional persistente entre cliente e servidor. Chat, notificações em tempo real, jogos, WebSocket é fundação. Este guia apresenta como implementar em apps mobile.
O Que É WebSocket
Definição
Protocolo de comunicação full-duplex sobre TCP.
Versus HTTP
HTTP: request/response. WebSocket: conexão persistente.
Porta
Usa 80/443 (ws:// e wss://).
Bidirecional
Servidor pode enviar para cliente sem request.
Quando Usar
Chat
Mensagens instantâneas.
Notificações
Real-time updates.
Colaboração
Múltiplos usuários editando.
Games
Estado sincronizado.
Dashboards
Métricas ao vivo.
IoT
Comunicação com devices.
Como Funciona
Handshake
Upgrade de HTTP para WebSocket.
Connection
Conexão persistente estabelecida.
Frames
Dados enviados como frames.
Close
Encerramento gracioso.
Implementação no Backend
Node.js
ws, Socket.io.
Python
websockets, Django Channels.
Go
Gorilla WebSocket.
Ruby
ActionCable (Rails).
Managed
Pusher, Ably, Firebase.
Socket.IO
O Que É
Biblioteca que abstrai WebSocket.
Fallbacks
Polling se WebSocket não disponível.
Rooms
Agrupamento de conexões.
Namespaces
Separação lógica.
Eventos
event-based API.
Implementação Mobile
iOS
URLSessionWebSocketTask. Starscream.
Android
OkHttp WebSocket.
React Native
react-native-websocket, Socket.io client.
Flutter
web_socket_channel, socket_io_client.
Gerenciamento de Conexão
Reconnection
Reconectar automaticamente.
Heartbeat
Ping/pong para manter vivo.
State
Track connection state.
Offline Queue
Queue messages when disconnected.
Autenticação
Token no Handshake
Envie auth token.
Verificação
Server valida antes de aceitar.
Refresh
Tratamento de token expiration.
Escalabilidade
Problema
Conexões persistentes consomem recursos.
Sticky Sessions
Usuário sempre no mesmo server.
Pub/Sub
Redis para comunicação entre servers.
Load Balancing
Layer 7 balancer com suporte WebSocket.
Alternativas
Server-Sent Events (SSE)
Unidirecional. Server → client.
Long Polling
Simula real-time com HTTP.
GraphQL Subscriptions
WebSocket sob GraphQL.
Firebase Realtime
Managed solution.
Casos de Uso Detalhados
Chat
- Conexão persistente
- Typing indicators
- Read receipts
- Presence
Live Updates
- Dashboard metrics
- Sports scores
- Stock prices
- Feed updates
Multiplayer
- Game state sync
- Player positions
- Actions broadcast
Best Practices
Reconnection Logic
Exponential backoff.
Heartbeat
Keep connection alive.
Message Format
JSON ou binary.
Compression
Perframe-deflate.
Security
WSS (TLS) obrigatório.
Debugging
Browser DevTools
Network tab mostra frames.
wscat
CLI tool para testar.
Logging
Log connect, disconnect, messages.
Performance
Connections
Limite por usuário.
Payload Size
Minimize dados.
Batching
Agrupe mensagens quando possível.
Binary
Mais eficiente que JSON para volume.
Erros Comuns
Não Reconnect
Conexão morre, app quebra.
Memory Leaks
Listeners não removidos.
No Auth
Conexões sem autenticação.
Ignore Disconnects
Não tratar estado offline.
Mobile Específico
Background
Conexão fecha em background.
Battery
Conexões persistentes drenam bateria.
Network Changes
WiFi → cellular requer reconexão.
Push Fallback
Usar push quando WebSocket indisponível.
Conclusão
WebSocket é essencial para features real-time. Implemente com reconexão robusta, autenticação adequada e considere impacto em bateria mobile. Para muitos casos, serviços gerenciados simplificam.
FAQs
1) WebSocket é melhor que polling? Para real-time, sim. Menos overhead.
2) Firebase substitui WebSocket? Para muitos casos sim. É WebSocket gerenciado.
3) WebSocket funciona em background mobile? Limitadamente. Use push para background.
4) Quantas conexões um server aguenta? Depende. Milhares a centenas de milhares com tuning.
5) WebSocket ou SSE? WebSocket para bidirecional. SSE para só server → client.
Leia também
- Backend para Aplicativos: Arquitetura, Tecnologias e Boas Práticas
- GraphQL para Aplicativos: Guia de Implementação
- Microsserviços em Aplicativos: Arquitetura Distribuída para Mobile
- Backend Para Aplicativos - Boas Praticas Para Escalar
- Backend Para Aplicativos - Boas Praticas Para Startups
- Arquitetura de Aplicativos: Fundamentos e Padrões Essenciais