Saltar para o conteúdo
BeoHosting
BeoHosting
Técnico

O Que São WebSockets e Como Funcionam

BeoHosting Team··9 min de leitura de leitura
O Que São WebSockets e Como Funcionam

Introdução ao protocolo WebSocket

O WebSocket é um protocolo de comunicação que permite a comunicação bidirecional (full-duplex) entre um navegador web e um servidor através de uma única ligação TCP. Ao contrário do protocolo HTTP clássico, em que o cliente tem de enviar um pedido para receber uma resposta, o WebSocket permite ao servidor enviar dados ao cliente sempre que tem algo novo para entregar, sem esperar por um pedido. Isto é revolucionário para aplicações web que requerem atualizações em tempo real.

Antes do WebSocket, os programadores recorriam a técnicas como o polling, em que o navegador envia pedidos ao servidor periodicamente, por exemplo a cada 2 segundos a perguntar se há novos dados, ou o long polling, em que o servidor mantém a ligação aberta até obter novos dados. Ambas as técnicas são ineficientes porque desperdiçam largura de banda em cabeçalhos HTTP e sobrecarregam o servidor com pedidos desnecessários. O WebSocket resolve estes problemas ao estabelecer uma ligação persistente com sobrecarga mínima.

Como funciona o WebSocket

Processo de handshake

Uma ligação WebSocket começa como uma ligação HTTP normal através de um processo conhecido como handshake. O cliente envia um pedido HTTP com cabeçalhos especiais Connection Upgrade e Upgrade websocket, sinalizando ao servidor o desejo de mudar para o protocolo WebSocket. O servidor responde com o código de estado 101 Switching Protocols caso suporte WebSocket, atualizando a ligação HTTP para WebSocket. A partir desse momento, ambos os lados podem enviar dados livremente sem sobrecarga HTTP.

Framing e transferência de dados

Depois de a ligação estar estabelecida, os dados são trocados através de frames WebSocket que são significativamente mais pequenos do que os pacotes HTTP. Cada frame contém apenas 2 a 14 bytes de sobrecarga, em comparação com as centenas de bytes dos cabeçalhos HTTP. O WebSocket suporta mensagens de texto em formato UTF-8 e dados binários. As mensagens podem ser fragmentadas em vários frames para transferir cargas úteis de grande dimensão. Frames de controlo como o ping e o pong são usados para verificar se a ligação ainda está ativa.

Fecho da ligação

Qualquer um dos lados pode iniciar o fecho da ligação WebSocket enviando um frame de fecho. O processo de fecho envolve a troca de frames de fecho, em que o lado que recebe o frame de fecho responde com o seu próprio frame de fecho, e depois disso a ligação TCP é fechada. O lado do cliente normalmente implementa a reconexão automática em caso de quebras inesperadas da ligação, com backoff exponencial entre as tentativas, para que o servidor não seja sobrecarregado.

Aplicações do WebSocket na prática

Aplicações de chat

O chat é a aplicação mais óbvia do WebSocket. Quando um utilizador envia uma mensagem, esta aparece instantaneamente a todos os participantes da conversa sem atualizar a página. Aplicações de chat modernas como o Slack, o Discord e o Facebook Messenger usam WebSocket para a entrega de mensagens em tempo real. Para além do texto, o WebSocket permite enviar indicadores de digitação, estado de leitura, estado de utilizador online e offline e notificações de novas mensagens. Implementar um chat com polling exigiria milhares de pedidos HTTP por minuto, ao passo que o WebSocket o faz com uma única ligação aberta.

Notificações em tempo real

Os sistemas de notificações em plataformas como o GitHub, o Trello ou ferramentas de gestão de projetos usam WebSocket para entregar notificações aos utilizadores assim que ocorre atividade relevante. Quando alguém comenta o seu pull request, o WebSocket entrega instantaneamente a notificação ao navegador sem que precise de atualizar a página. Isto é especialmente importante em ferramentas colaborativas, onde vários utilizadores trabalham no mesmo projeto em simultâneo, porque cada alteração tem de ser visível para todos os participantes em tempo real.

Dashboards e monitorização ao vivo

Os dashboards que apresentam métricas em tempo real, como o acompanhamento do tráfego do site, a monitorização de servidores, dados financeiros ou sensores IoT, usam WebSocket para a atualização contínua de gráficos e valores. Em vez de o dashboard atualizar a página inteira a cada 5 segundos, o WebSocket entrega apenas os dados alterados, o que reduz significativamente a carga sobre o servidor e o consumo de largura de banda. Ferramentas como o Grafana e o Kibana usam WebSocket para a transmissão de métricas ao vivo.

Edição colaborativa

O Google Docs, o Figma e ferramentas semelhantes permitem que vários utilizadores editem o mesmo documento em simultâneo graças ao WebSocket. Cada alteração feita por um utilizador propaga-se instantaneamente a todos os outros utilizadores. Isto requer algoritmos sofisticados de resolução de conflitos, como a Operational Transformation ou os algoritmos CRDT, que garantem a consistência do documento mesmo quando dois utilizadores editam em simultâneo a mesma parte do texto.

WebSocket em diferentes linguagens de programação

JavaScript e Node.js

No navegador, a API WebSocket está integrada e é usada diretamente sem bibliotecas adicionais. Criar uma ligação é simples com o construtor new WebSocket, que recebe o URL do servidor. Do lado do servidor, as bibliotecas Node.js mais populares incluem a ws, que é minimalista e rápida, e a Socket.IO, que adiciona fallback automático para polling caso o WebSocket não esteja disponível, além de salas para mensagens em grupo e reconexão automática. A Socket.IO é a escolha mais popular para projetos JavaScript porque abstrai a complexidade e funciona de forma fiável mesmo em redes com firewalls restritivas.

Python e PHP

Os programadores Python usam bibliotecas como a websockets para acesso assíncrono ou o Django Channels, que adiciona suporte de WebSocket à framework Django. O Flask-SocketIO é uma opção popular para aplicações Flask. O PHP tradicionalmente não é ideal para WebSocket porque foi concebido para o modelo pedido-resposta, mas a biblioteca Ratchet e a extensão Swoole permitem servidores WebSocket em PHP. O Laravel usa o Laravel Echo com o Pusher ou o Socket.IO para funcionalidades em tempo real, tendo o Laravel Reverb como solução auto-alojada.

Requisitos de alojamento para aplicações WebSocket

Configuração do servidor

As aplicações WebSocket têm requisitos de alojamento específicos. O alojamento partilhado normalmente não suporta WebSocket porque este exige ligações de longa duração que o ambiente partilhado não consegue gerir de forma eficiente. O alojamento em servidor virtual ou um servidor dedicado é o mínimo para produção. O servidor web tem de estar configurado para proxy WebSocket — o Nginx usa proxy_pass com cabeçalhos upgrade, o Apache usa mod_proxy_wstunnel. A firewall tem de permitir tráfego WebSocket, que normalmente usa as portas 80 para o protocolo ws e 443 para o protocolo wss.

Escalar aplicações WebSocket

Escalar WebSocket é mais complexo do que escalar aplicações HTTP, porque cada ligação consome memória no servidor. Um servidor consegue manter entre 10 000 e 100 000 ligações WebSocket em simultâneo, dependendo do hardware e da aplicação. Para um número maior de utilizadores, recorre-se à escalabilidade horizontal com Redis pub/sub ou um message broker semelhante para sincronizar as mensagens entre instâncias de servidor. O balanceador de carga tem de suportar sticky sessions ou IP hash para que a ligação WebSocket permaneça no mesmo servidor de backend.

Segurança do WebSocket

Encriptação WSS

Tal como o HTTP tem o HTTPS, o WebSocket tem o WSS (WebSocket Secure), que usa encriptação TLS. Use sempre WSS em produção, porque as ligações WebSocket não encriptadas podem ser intercetadas. A maioria dos navegadores modernos bloqueia ligações ws a partir de páginas carregadas via HTTPS, pelo que o WSS é praticamente obrigatório. O certificado SSL que usa para o HTTPS cobre automaticamente também as ligações WSS no mesmo domínio.

Autenticação e autorização

O WebSocket não suporta cabeçalhos HTTP após o handshake inicial, pelo que a autenticação é normalmente feita enviando um token como parâmetro de query ao estabelecer a ligação, ou enviando uma mensagem de autenticação imediatamente após a ligação. Os tokens JWT são uma escolha popular porque o servidor consegue verificar a identidade do utilizador sem uma consulta à base de dados. A autorização determina a que canais ou salas um utilizador pode aceder e que mensagens pode enviar. Nos planos VPS da BeoHosting tem controlo total sobre a configuração do servidor, o que permite uma configuração ótima da aplicação WebSocket com a segurança e o desempenho adequados.

Conclusão

O protocolo WebSocket é uma tecnologia fundamental para as aplicações web modernas que requerem comunicação em tempo real. De sistemas de chat e notificações a ferramentas colaborativas e dashboards ao vivo, o WebSocket permite experiências que o HTTP clássico simplesmente não consegue oferecer. Compreender como funciona o WebSocket, quando usá-lo e como implementá-lo corretamente é uma competência essencial para qualquer programador web que pretenda criar aplicações dinâmicas e interativas.

BeoHosting Team

10+ anos de experiência — Especialistas em alojamento web e infraestrutura

  • Web Hosting
  • WordPress Hosting
  • VPS
  • Dedicated Serveri
  • Domeni
  • SSL
  • cPanel
  • LiteSpeed
  • Linux administracija
  • DNS

Última atualização: