Junior
O que são os WebSockets?
sobes.tech IA
Resposta da IA
Os Websockets são um protocolo de comunicação bidirecional através de uma única ligação TCP, permitindo a troca de dados em tempo real entre o navegador e o servidor.
Principais diferenças em relação às requisições HTTP tradicionais:
- Comunicação bidirecional: O servidor pode enviar dados ao cliente sem uma solicitação prévia do cliente.
- Uma única ligação: É estabelecida uma ligação de longa duração, eliminando os custos de estabelecer uma nova ligação para cada troca de dados (como no HTTP).
- Redução da latência: Menos tempo é gasto na estabelecimento da ligação, troca de cabeçalhos e processamento de requisições/respostas curtas.
Princípio de funcionamento:
- Handshake: O navegador envia uma requisição HTTP especial ao servidor (com os cabeçalhos
Upgrade: websocketeConnection: Upgrade). - Estabelecimento da ligação: Se o servidor suportar websockets, responde com o código
101 Switching Protocols, após o qual a ligação passa a usar o protocolo websocket. - Transmissão de dados: Após a ligação ser estabelecida, ambas as partes podem trocar mensagens livremente a qualquer momento.
Exemplos de uso:
- Jogos online
- Chats e mensageiros
- Atualizações em tempo real de dados (cotação, notícias)
- Ferramentas colaborativas
Vantagens:
- Baixa latência
- Uso eficiente de recursos (menos overhead)
- Comunicação bidirecional em tempo real
Desvantagens:
- Requer suporte tanto no cliente (navegador) como no servidor.
- Implementação mais complexa comparada às requisições HTTP simples.
Exemplo de código cliente em JavaScript:
// criação de websocket
const socket = new WebSocket('wss://example.com/websocket');
// manipulador de abertura de ligação
socket.onopen = function(event) {
console.log('Ligação estabelecida');
socket.send('Olá, servidor!'); // envio de mensagem ao servidor
};
// manipulador de receção de mensagem
socket.onmessage = function(event) {
console.log('Mensagem recebida do servidor: ' + event.data);
};
// manipulador de encerramento de ligação
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`Ligação fechada limpidamente, código=${event.code} motivo=${event.reason}`);
} else {
console.log('Ligação interrompida'); // por exemplo, devido a uma falha de rede
}
};
// manipulador de erro
socket.onerror = function(error) {
console.error(`Erro de websocket: ${error}`);
};
// encerramento da ligação (se necessário)
// socket.close();