Quando o HTTP não dá conta
Por que apps em tempo real precisam de uma conexão diferente
⏱ Estim. ~7 min
01 · Ler
Você construiu um servidor que responde a requisições. O navegador pede a página, o servidor manda de volta. O formulário envia dados, o servidor processa. Esse ciclo requisição-resposta é como a maior parte da web funciona.
Mas e se o servidor precisar falar com você primeiro, sem que você tenha perguntado?
O adversário no xadrez faz uma jogada. Uma mensagem de chat chega. O preço da ação muda. Com HTTP normal, o servidor não consegue tomar a iniciativa — ele tem que esperar você perguntar. Esse é o problema na hora de construir qualquer coisa em tempo real.
💡 Imagine assimHTTP é como mandar cartas pelo correio. Você escreve, posta e espera resposta. Funciona, mas tem um delay a cada troca. WebSocket é como uma ligação telefônica — a conexão fica aberta e os dois lados podem falar a qualquer momento. Sem esperar carta.
Pontos-chave
- HTTP é requisição-resposta: o cliente sempre toma a iniciativa
- Com HTTP, o servidor nunca consegue enviar dados ao cliente por conta própria
- Funcionalidades em tempo real — jogos, chat, atualizações ao vivo — precisam de outra coisa
- WebSocket resolve isso com uma conexão persistente e bidirecional
02 · Ler
Antes do WebSocket existir, os devs tentavam gambiarras para fazer tempo real, com uma técnica chamada polling. O navegador perguntava ao servidor a cada um ou dois segundos: "Tem novidade?". Se tinha, o servidor mandava; se não, mandava uma resposta vazia.
Polling funciona, tecnicamente. Mas é desperdício. Imagine ligar para a pizzaria a cada 30 segundos perguntando "meu pedido tá pronto?". Na maior parte das vezes a resposta é não e você desperdiça seu tempo e o deles.
WebSocket substituiu essa gambiarra por uma solução de verdade: uma conexão persistente em que os dois lados podem mandar mensagens a qualquer momento, sem precisar perguntar.
Pontos-chave
- Polling: o cliente fica perguntando num timer "tem novidade?" — desperdício
- A maior parte dos polls volta vazia — desperdiça banda e carrega o servidor
- WebSocket: uma conexão, fica aberta, os dois lados mandam à vontade
- Todo app importante de tempo real usa WebSocket: Slack, Discord, Google Docs, jogos multiplayer
03 · Passo a passo
Veja abaixo como uma conexão WebSocket é estabelecida — começa com uma requisição HTTP normal e faz o upgrade.
1. Cliente envia requisição HTTP
O navegador envia uma requisição HTTP normal ao servidor, mas com um header especial: 'Upgrade: websocket'. Isso diz ao servidor: "quero mudar de HTTP para WebSocket".
2. Servidor aceita o upgrade
Se o servidor suporta WebSocket, ele responde com o status 101 (Switching Protocols). A conexão HTTP é então promovida a uma conexão WebSocket.
3. Conexão persistente aberta
Agora os dois lados podem mandar mensagens a qualquer momento. O servidor empurra dados ao cliente sem precisar ser perguntado. O cliente manda dados ao servidor sem esperar resposta.
4. Mensagens fluem livremente
Cada lado envia pequenos pacotes de dados chamados 'frames'. Não há padrão de requisição-resposta — só mensagens que vão e voltam conforme necessário. É assim que uma jogada de xadrez aparece imediatamente na tela do adversário.
5. Fechar conexão ao terminar
Qualquer um dos lados pode fechar a conexão a qualquer momento. O navegador fecha quando você sai. O servidor fecha quando você faz logout. Até lá, fica aberta.
04 · Classificar arrastando
Classifique cada funcionalidade: ela usa HTTP ou WebSocket?
(Esta seção é interativa — ative o JavaScript para usar.)
05 · Quiz
Qual é a principal vantagem do WebSocket sobre HTTP para um jogo multiplayer?
- O servidor consegue empurrar atualizações aos jogadores instantaneamente, sem que eles precisem pedir
- WebSocket é mais seguro que HTTP
- WebSocket usa menos banda no carregamento inicial da página
- WebSocket não exige servidor nenhum
06 · Preencher
Diferente do ciclo requisição-resposta do HTTP, o WebSocket estabelece uma conexão _____ em que os dois lados podem trocar mensagens a qualquer momento.
Outras lições deste capítulo
⚠ A experiência interativa completa precisa de JavaScript. Ative-o e recarregue a página.
※ Este é um projeto educacional independente — não é um produto oficial da Anthropic. Claude™ é uma marca registrada da Anthropic, PBC.