Sobes.tech
Junior

O que é WebSocket?

sobes.tech IA

Resposta da IA

Protocolo de nível de aplicação que fornece um canal de comunicação bidirecional e full duplex através de uma única ligação TCP. É utilizado para aplicações em tempo real: chats, jogos online, plataformas de trading.

Diferenças do HTTP:

  • HTTP: o cliente envia uma requisição, o servidor responde (unidirecional). Estabelece uma nova ligação para cada requisição ou reutiliza através de Keep-Alive.
  • WebSocket: após estabelecer a ligação, o cliente e o servidor podem enviar dados a qualquer momento sem reestabelecer a ligação (bidirecional).

Estabelecimento da ligação:

Utiliza HTTP para o "aperto de mão" inicial (handshake). O cliente envia uma requisição HTTP com os cabeçalhos Upgrade: websocket e Connection: Upgrade. O servidor responde com uma resposta HTTP com o estado 101 Switching Protocols.

Frames de dados:

A transmissão de dados ocorre em forma de frames, permitindo transmitir diferentes tipos de dados (texto, dados binários).

Exemplo de estabelecimento de ligação (de forma esquemática):

Cliente -> Servidor (Pedido de Upgrade)

GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13

Servidor -> Cliente (Resposta de Upgrade)

HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZgYesItU=

Depois disto, inicia-se a troca de frames WebSocket.

Vantagens:

  • Baixa latência.
  • Redução da carga no servidor (não é necessário fazer polling constante).
  • Capacidade de transmitir dados em tempo real.

Desvantagens:

  • Necessidade de suporte no cliente e no servidor.
  • Implementação mais complexa comparada com uma simples requisição HTTP.

Em Java, para trabalhar com WebSocket, costuma-se usar bibliotecas:

  • Java API para WebSocket (JSR 356).
  • Spring WebSocket.
  • Netty.