Contrapressão e agrupamento de mensagens
Impeça que produtores rápidos sobrecarreguem consumidores lentos usando sinais de contrapressão e agrupamento de mensagens em WebSockets.
Contrapressão e agrupamento de mensagens é uma aula grátis de WebSockets & Realtime Systems Programming no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de WebSockets & Realtime Systems Programming, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de WebSockets & Realtime Systems Programming inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
The Problem of Speed Mismatch
When a producer sends faster than a consumer or the network can handle, messages pile up in buffers, memory grows, and latency spikes. Managing this is called backpressure.
The Send Buffer
Each WebSocket has an outgoing buffer. If you keep calling send faster than the socket can flush, that buffer grows unbounded.
Measuring Buffer Pressure
The browser exposes bufferedAmount: bytes queued but not yet sent. A rising value signals the consumer side is falling behind.
if (ws.bufferedAmount > 1_000_000) {
// pause sending
}Applying Backpressure
When the buffer is high, stop producing until it drains. Resume when it falls below a low watermark.
function maybeSend(data) {
if (ws.bufferedAmount < HIGH_WATER) ws.send(data);
else pendingFlush();
}Server-Side Backpressure
On Node.js, ws.send can accept a callback, and the underlying stream signals when to slow down. Respect it instead of blindly flooding.
ws.send(data, () => {
// safe to send the next chunk
});Why Batch Messages
Sending thousands of tiny messages is inefficient: each has framing overhead. Batching groups many updates into one frame, cutting overhead dramatically.
Time-Based Batching
Collect messages for a short window, then flush them together on a timer.
let batch = [];
setInterval(() => {
if (batch.length) { ws.send(JSON.stringify(batch)); batch = []; }
}, 50);Size-Based Batching
Alternatively flush when the batch reaches a target size, capping per-message latency.
function add(msg) {
batch.push(msg);
if (batch.length >= 100) flush();
}Coalescing Updates
For state that changes rapidly (like a cursor position), keep only the latest value instead of every intermediate one. This is coalescing, a powerful form of batching.
The Latency Trade-off
Batching trades a little latency for much higher throughput. Tune the window so users do not perceive lag while you still gain efficiency.
Best Practices
Handle flow control well:
- Watch
bufferedAmountto detect pressure - Pause producing above a high watermark
- Batch tiny messages by time or size
- Coalesce rapidly-changing state
Quick Check
Test your flow-control knowledge.
Recap
You learned flow control over WebSockets:
- Backpressure prevents buffer overload
- Monitor
bufferedAmountand pause above a watermark - Batch tiny messages by time or size
- Coalesce fast-changing state
Your realtime channel now stays stable under load.
Perguntas Frequentes
A aula “Contrapressão e agrupamento de mensagens” é grátis?
Sim — o texto completo de “Contrapressão e agrupamento de mensagens” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de WebSockets & Realtime Systems Programming, atualize para CoddyKit PRO. O curso de WebSockets & Realtime Systems Programming inclui 4 aulas no total.
O que vou aprender em “Contrapressão e agrupamento de mensagens”?
Impeça que produtores rápidos sobrecarreguem consumidores lentos usando sinais de contrapressão e agrupamento de mensagens em WebSockets. Você pratica WebSockets & Realtime Systems Programming com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar WebSockets & Realtime Systems Programming?
Nenhuma experiência prévia é necessária. WebSockets & Realtime Systems Programming no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Contrapressão e agrupamento de mensagens”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de WebSockets & Realtime Systems Programming?
Sim. Cada aula de WebSockets & Realtime Systems Programming inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Implementando mensagens de publicação e assinatura
- Requisição e resposta sobre WebSockets
- Transmissão bidirecional e controle de fluxo
- Contrapressão e agrupamento de mensagens