Melhores Práticas em Tempo Real
Um resumo condensado das 25 práticas mais importantes em tempo real para backends Node.js - extraídas de todas as páginas desta seção.
Busque em todas as páginas da documentação
Um resumo condensado das 25 práticas mais importantes em tempo real para backends Node.js - extraídas de todas as páginas desta seção.
Escolha o protocolo pela direcionalidade: SSE para push do servidor; WebSocket para bidirecional - Noções Básicas de Tempo Real.
Autentique no upgrade da conexão: Valide o token antes que o handshake do WebSocket seja concluído.
Nunca autentique após o fluxo de mensagens: Rejeite conexões não autenticadas imediatamente.
Ping/pong heartbeat a cada 30s: Detecte e encerre conexões mortas - Biblioteca ws.
Limpe na desconexão: Remova de conjuntos de clientes; limpe intervalos e listeners.
Use salas para fanout direcionado: Não io.emit() para todos os clientes conectados - Socket.IO.
Adaptador Redis antes da segunda instância: As salas do Socket.IO quebram sem ele - Escalando Tempo Real.
Pub/sub Redis para escalonamento de ws bruto: Cada instância faz fanout apenas para clientes locais.
Sessões fixas (sticky sessions) para transporte de polling: ip_hash ou sessionAffinity do K8s.
Desabilite o buffer do nginx para SSE: proxy_buffering off e X-Accel-Buffering: no.
Defina os cabeçalhos SSE corretamente: text/event-stream, no-cache, keep-alive.
Lide com a reconexão do cliente: SSE reconecta automaticamente; WebSocket precisa de lógica de retentativa do cliente.
Valide mensagens JSON: try/catch em JSON.parse nos manipuladores de mensagens.
Limite de taxa de mensagens por socket: Desconecte clientes abusivos.
Monitore bufferedAmount: Feche clientes lentos (backpressure).
Limites de conexão por instância: Planeje 10k-50k ociosos; menos com fanout ativo.
Exporte a métrica de contagem de conexões: Prometheus + HPA para autoescalonamento.
Desligamento gracioso em SIGTERM: Notifique clientes, drene, wss.close().
Use protocolo de mensagem JSON com campo type: Roteamento de mensagens extensível.
Não use WebSocket para CRUD: HTTP REST para requisições; WS apenas para push.
Termine TLS no proxy: wss:// na borda, ws:// para Node.
Teste com configuração real de múltiplas instâncias: Dois processos atrás do nginx.
Planeje HA do Redis: Sentinel ou Cluster; pub/sub é um ponto único de falha.
Registre eventos de conexão/desconexão: Inclua ID do usuário e contagem de conexões.
Documente a escolha do protocolo no ADR: Por que SSE vs WebSocket para este recurso.
Escalonamento para múltiplas instâncias sem adaptador Redis ou pub/sub. As mensagens só chegam aos clientes no mesmo servidor.
SSE. Notificações são de servidor para cliente. Infraestrutura mais simples e reconexão automática.
Quando você precisa de salas, fallback de transporte e adaptador Redis integrado. ws bruto para controle mínimo.
Cliente WebSocket em testes de integração. Para múltiplas instâncias, execute dois processos e verifique a entrega entre instâncias.
Planeje a arquitetura de escalonamento antes de 1000 conexões simultâneas. Implemente Redis e sessões fixas antes da segunda réplica.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026