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.