Redução da largura de banda com compressão de mensagens
Reduza o uso de largura de banda do WebSocket usando a extensão permessage-deflate e um design inteligente das cargas úteis, entendendo suas compensações de CPU e memória.
Redução da largura de banda com compressão de mensagens é uma aula grátis de WebSockets & Real-Time Systems with Spring 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 & Real-Time Systems with Spring, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de WebSockets & Real-Time Systems with Spring inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
Bandwidth Is a Bottleneck
Real-time apps can push thousands of frames per second. On mobile and high-fan-out systems, raw bytes on the wire become a real cost in latency, data charges, and egress bills.
The permessage-deflate Extension
WebSocket defines an extension, permessage-deflate, that compresses each message with DEFLATE (the same algorithm as gzip) before it is sent and decompresses it on arrival.
Negotiated in the Handshake
Compression is negotiated via the Sec-WebSocket-Extensions header during the upgrade. If both peers agree, frames are compressed transparently afterward.
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bitsWhere Compression Wins
Compression helps most with text and JSON, which are highly repetitive. A 4 KB JSON payload can shrink to under 1 KB.
Already-compressed data (images, video, gzip) barely shrinks and just wastes CPU.
The CPU Trade-off
Compression is not free. Every message costs CPU on both sides. Under very high message rates the CPU spent compressing can outweigh the bandwidth saved.
The Context-Takeover Memory Cost
DEFLATE keeps a sliding-window dictionary per connection (context takeover). With many connections this is significant memory. Disabling takeover saves RAM but lowers the compression ratio.
Enabling in Spring (Tomcat)
Spring delegates to the servlet container. On Tomcat you tune the WebSocket compression via container properties or a customizer.
server.tomcat.use-relative-redirects=false
# Tomcat enables permessage-deflate when the client offers it;
# tune limits via WsServerContainer / @Bean customizerPer-Message Skip for Small Frames
Compressing tiny frames adds overhead with little gain. Many stacks skip compression below a threshold (e.g. messages under 256 bytes). Keep this in mind when designing payload sizes.
Application-Level Alternatives
Before reaching for transport compression, shrink the payload itself:
- Send deltas, not full snapshots
- Use short field names or a binary format (Protobuf, MessagePack)
- Batch many small updates into one frame
Measuring the Benefit
Always measure. Compare bytes-on-wire and CPU before and after enabling compression for your real traffic mix; do not assume it is always a win.
# Compare with monitoring metrics
websocket.bytes.sent (deflate on vs off)
process.cpu.usageChoosing a Strategy
Rules of thumb:
- High-volume JSON, bandwidth-bound → enable permessage-deflate
- Many idle connections, memory-bound → disable context takeover
- CPU-bound, small frames → prefer application-level payload shrinking
Quick Check
Test your compression knowledge.
Recap
You optimized bandwidth:
- permessage-deflate compresses each message, negotiated in the handshake
- Best for repetitive text/JSON; useless for already-compressed data
- It trades CPU and per-connection memory (context takeover) for fewer bytes
- Application-level deltas, binary formats, and batching are complementary
- Always measure before and after for your real traffic
Perguntas Frequentes
A aula “Redução da largura de banda com compressão de mensagens” é grátis?
Sim — o texto completo de “Redução da largura de banda com compressão 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 & Real-Time Systems with Spring, atualize para CoddyKit PRO. O curso de WebSockets & Real-Time Systems with Spring inclui 4 aulas no total.
O que vou aprender em “Redução da largura de banda com compressão de mensagens”?
Reduza o uso de largura de banda do WebSocket usando a extensão permessage-deflate e um design inteligente das cargas úteis, entendendo suas compensações de CPU e memória. Você pratica WebSockets & Real-Time Systems with Spring 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 & Real-Time Systems with Spring?
Nenhuma experiência prévia é necessária. WebSockets & Real-Time Systems with Spring 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 “Redução da largura de banda com compressão 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 & Real-Time Systems with Spring?
Sim. Cada aula de WebSockets & Real-Time Systems with Spring 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
- Avaliação do desempenho dos WebSockets
- Monitorização de ligações WebSocket
- Ajuste das definições do Spring WebSocket
- Redução da largura de banda com compressão de mensagens