Iniciante Arquitetura de Sistemas

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.