WebSocket
WebSocket é um protocolo que mantém uma conexão aberta entre cliente e servidor, permitindo que os dois enviem mensagens a qualquer momento. Diferente do HTTP tradicional, onde o cliente sempre precisa perguntar primeiro.
HTTP x WebSocket
No HTTP comum, só o cliente inicia. O servidor não pode “puxar” você:
HTTP: Cliente -> pede -> Servidor
Cliente <- responde <- Servidor
(conexão fecha)
WebSocket: Cliente <===========> Servidor
(conexão fica aberta, dois sentidos)
O handshake
A conexão começa como um HTTP normal e é “promovida” para WebSocket:
GET /chat HTTP/1.1
Host: exemplo.com
Upgrade: websocket
Connection: Upgrade
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Depois do status 101, o canal está aberto nos dois sentidos e os dados trafegam livremente.
Exemplo de uso
const ws = new WebSocket("wss://exemplo.com/chat")
ws.onmessage = (msg) => console.log("Recebido:", msg.data)
ws.send("Olá, servidor!")
O servidor pode mandar mensagens quando quiser, sem o cliente pedir.
WebSocket x HTTP polling
Antes do WebSocket, para simular tempo real o cliente ficava perguntando de novo e de novo (polling):
Polling: pergunta... nada
pergunta... nada
pergunta... novidade! (desperdício)
WebSocket: servidor avisa na hora que há novidade
WebSocket economiza tráfego e entrega mensagens instantaneamente.
Casos de uso
- Chat e mensagens em tempo real.
- Notificações ao vivo.
- Cotações de bolsa, placares esportivos.
- Jogos online.
- Edição colaborativa (vários usuários no mesmo documento).
Vantagens
- Comunicação instantânea nos dois sentidos.
- Menos overhead que ficar abrindo conexões.
Desvantagens
- Conexão aberta consome recursos no servidor.
- Mais complexo de escalar (estado de conexão).
- Não serve para tudo: requisições simples seguem melhores em HTTP/REST.
Use WebSocket quando o tempo real for essencial. Para o resto, HTTP continua mais simples.