O que o iniciante precisa compreender sobre WebSocket?
Antes de começarmos a falar de WebSocket, é primordial que eu te introduza o HTTP(HyperText Transfer Protocol).
O HTTP é o principal protocolo de comunicação web, o modelo dele é baseado em requisição e resposta, para os mais nerds “request and response” e traduzindo para leigos, um navegador de internet envia solicitações e o servidor da aplicação responde com algo. A grosso modo é isso, a requisição HTTP é um GET quando queremos consultar algo, e um POST quando queremos enviar algo, repetindo a GROSSO MODO é isto.
Como o servidor responde? Com um código de resposta e dependendo da configuração da aplicação e da requisição feita, responde com um conteúdo(body, não entraremos em detalhes dos cabeçalhos).
O protocolo HTTP tem algumas limitações que você já deve ter percebido, o servidor RESPONDE, ele não tem poderes de ele abrir uma requisição para o cliente(ex: navegador), isso é o que chamamos de comunicação unidirecional. E temos outra limitação que é a conexão efêmera. O que seria isto? Cada requisição e resposta é independente, resultando em uma nova conexão para cada requisição.
Sendo assim as limitações do HTTP o transformam em um protocolo ineficiente para aplicações que dependem de atualizações frequentes.
Um exemplo de um chat, com o HTTP, só seria possível o servidor enviar mensagens quando ele for solicitado pelo cliente, algo que é estranho. Pois precisamos receber mensagens independentes de termos enviado mensagens ao servidor.
O WebSocket foi desenvolvido para superar estas limitações.
Ele é um protocolo de comunicação bidirecional que opera sobre o protocolo HTTP. Para se estabelecer a conexão o processo é iniciado com uma requisição HTTP de handshake do cliente para o servidor solicitando uma conexão WebSocket esta requisição inclui um cabeçalho específico “Upgrade: websocket”. Quando o servidor recebe este tipo de solicitação, caso ele suporte o upgrade e a aceite, teremos uma resposta com o código de resposta “101 Switching Protocols” e a conexão será estabelecida.
Esta é uma conexão bidirecional, o que significa isto, teremos uma troca de mensagens entre servidor e cliente sem uma nova requisição HTTP, agora tanto o cliente quanto o servidor podem enviar mensagens.
No WebSocket, temos baixa latência, pois temos uma conexão sempre aberta, sem a sobrecarga de cabeçalhos a cada nova requisição.
Os dados são enviamos como frames, podendo conter texto, dados binários ou sinais de controle, como os frames de fechamento de conexão.
Algumas características técnicas:
- Portas: Assim como no HTTP e HTTPS temos a porta 80(WS) e 443(WSS).
- Protocolo: Inicia-se como HTTP, mas após o Handshake vira um protocolo WebSocket.
- Segurança: WebSockets pode ser utilizado em conjunto com TLS (Transport Layer Security) para garantir a segurança da comunicação, sendo identificado pelo prefixo wss://.
- Suporte a Browsers: A maioria dos navegadores modernos oferece suporte nativo ao WebSocket, tornando-o uma opção viável para aplicações web que necessitam de comunicação em tempo real.
Exemplos de uso:
Aplicações de chat em tempo real.
Jogos online que requerem atualizações constantes entre o cliente e o servidor.
Plataformas de trading que exigem atualização em tempo real de preços de ações.
Monitoramento em tempo real de dados de sensores ou outros dispositivos IoT.
Gostou?