| Característica | REST (HTTP) | WebSocket |
|---|---|---|
| Modelo de comunicação | Request‑Response (unidirecional) | Bidirecional, fluxo contínuo |
| Persistência da conexão | Cada requisição abre/fecha a conexão | Conexão aberta indefinidamente |
| Formato de dados | JSON/XML/HTML em payload HTTP | Frames (text ou binary) sem cabeçalhos HTTP |
| Latência | Alta (cada chamada envolve handshake, cabeçalhos) | Baixa (apenas o frame é enviado) |
| Segurança | HTTPS (TLS) + autenticação padrão | wss:// (TLS); requer controle de origem e tokens |
| Custo de rede | Alto em chamadas frequentes | Reduzido após handshake inicial |
| Casos de uso típicos | CRUD, páginas estáticas, APIs públicas | Chat, jogos multiplayer, dashboards em tempo real, notificações push |
O acesso ao protocolo no frontend é feito através da classe WebSocket.
let socket = new WebSocket("wss://...");socket para enviar ou fechar o canal.A propriedade readyState reflete o estado da conexão: 0 (CONNECTING), 1 (OPEN), 2 (CLOSING), 3 (CLOSED).
let socket = new WebSocket("wss://javascript.info/article/websocket/demo/hello");
socket.onopen = function(e) {
console.log("[open] Connection established");
socket.send("My name is John");
};
socket.onmessage = function(event) {
console.log(`[message] Data received from server: ${event.data}`);
};
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`);
} else {
console.log('[close] Connection died'); // em caso de problema
}
};
socket.onerror = function(error) {
console.log(`[error]`);
};
Implementar um canal de comunicação persistente, simulando um servidor que recebe mensagens e as ecoa de volta para o cliente.
Siga o passo-a-passo em:
https://denmartins.github.io/labs/2026-04-23-sd-websockets
Créditos da imagem: https://unsplash.com/@safarslife
WebSocket define dois esquemas principais para a comunicação:
ws://: Usado para conexões não criptografadas (equivalente ao HTTP). Mais simples, mas inseguro.wss://: Usado para conexões seguras e criptografadas via TLS/SSL (equivalente ao HTTPS). Sempre preferível em produção.A sintaxe segue um padrão genérico, muito parecido com a URL do HTTP:
[Esquema]://[Host]:[Porta]/[Caminho]? [Parâmetros de Consulta]
Porta Padrão: A porta é opcional.
ws: Porta 80 (padrão HTTP). wss: Porta 443 (padrão HTTPS/TLS).
wss://example.com:443/websocket/demo?foo=bar
└─┘ └──────────┘ └─┘ └────────────┘ └─────┘
│ │ │ │ │
│ │ │ │ └── Query
│ │ │ └───────────── Path
│ │ └────────────────────── Port
│ └─────────────────────────────── Host
└───────────────────────────────────────── Scheme
ws/wss): Define o protocolo e a segurança.api.empresa.com).wss, geralmente omitido).Path): A rota específica no servidor (ex: /chat).Query): Informações adicionais, como filtros ou IDs (ex: ?user=alice).Mais informações em https://docs.cloud.google.com/pubsub/docs/streaming-cloud-pub-sub-messages-over-websockets?hl=pt-br
Mais informações em https://websocket.org/guides/heartbeat/
Conceitos Principais:
101 Switching Protocols.Leitura Recomendada: The WebSocket Handbook
Dúvidas e Discussão
Implementar uma aplicação de chat em tempo real que suporte múltiplos clientes simultâneos. O servidor deve atuar como um hub central, recebendo mensagens de qualquer cliente e retransmitindo (broadcast) essa mensagem para todos os outros clientes conectados, mantendo o canal de comunicação ativo mesmo com desconexões.
O chat deve incluir:
**Eventos principais:** - `onopen`: Lançado quando a conexão é estabelecida. - `onmessage`: Recebe dados do servidor (texto ou binário). - `onerror`: Lançado em falhas inesperadas. - `onclose`: Lançado quando a conexão fecha. - **Métodos principais:** - `send(data)`: Envia strings, Blobs ou ArrayBuffers. - `close(code, reason)`: Inicia o encerramento.