WebSocket
Real-time
API
Mobile
Chat
Comunicação

WebSocket em Aplicativos: Comunicação Real-Time

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