O Que É um WebSocket? Conexões Persistentes de Mão Dupla
Um WebSocket é uma conexão de longa duração que permanece aberta após um handshake HTTP, permitindo que cliente e servidor enviem mensagens um ao outro a qualquer momento.
O HTTP puro é requisição-resposta: o cliente pergunta e o servidor responde. Os WebSockets quebram esse padrão fazendo o upgrade de uma conexão para que ambos os lados possam enviar mensagens sempre que quiserem. Logs de build ao vivo, streams de progresso de deploy e dashboards que atualizam sem recarregar frequentemente usam WebSockets.
O handshake de upgrade
Um WebSocket começa como uma requisição HTTP com um header Upgrade. Se o servidor concorda, a conexão troca de protocolo e permanece aberta como um canal bidirecional em vez de fechar após uma resposta.
Mensagens full-duplex
Uma vez aberto, qualquer lado pode enviar mensagens de forma independente, sem necessidade de polling. Isso é ideal para dados em tempo real em que o servidor tem atualizações para enviar.
Onde aparece em CI/CD
- Streaming ao vivo de logs de build e deploy para uma UI.
- Status de job em tempo real em um dashboard.
- Consoles interativos anexados a um container em execução.
As conexões caem
Conexões de longa duração são inerentemente frágeis: um timeout de proxy, uma instabilidade de rede ou um período ocioso podem cortá-las. Clientes robustos reconectam automaticamente e retomam de onde pararam.
Proxies e load balancers
Nem todo proxy ou load balancer encaminha upgrades de WebSocket por padrão. Um deploy que coloca um novo proxy na frente de um serviço pode quebrar silenciosamente o tráfego de WebSocket mesmo que o HTTP comum ainda funcione.
Quedas transitórias em pipelines
Um stream de logs derrubado durante um deploy longo é uma instabilidade transitória, não uma falha de build. Na Latchkey, o streaming no lado do runner reconecta através de interrupções breves de rede, para que uma queda momentânea não corte seus logs nem falhe o job.
Principais conclusões
- Um WebSocket faz o upgrade de uma conexão HTTP para um canal persistente de mão dupla.
- Ele viabiliza recursos em tempo real como streaming de logs ao vivo e dashboards de status.
- As conexões caem em instabilidades e timeouts de proxy, então os clientes devem reconectar.