O que são Server-Sent Events e por que você precisa deles?
\n\nImagine: você abriu um site com cotações de moedas e a taxa do dólar muda diante dos seus olhos — sem recarregar a página, sem clicar em botões. Ou você está aguardando o resultado do processamento de um arquivo grande no servidor e, de repente, aparece uma linha: "Pronto em 70%". Como isso funciona? Uma das maneiras mais elegantes é Server-Sent Events (SSE).
\n\nSSE é uma tecnologia que permite ao servidor enviar dados ao cliente de forma autônoma a qualquer momento, assim que eles estiverem disponíveis. Ao contrário do WebSocket, o SSE funciona apenas em uma direção — do servidor para o cliente. Mas é aí que está seu superpoder: ele é incrivelmente simples, eficiente e ideal para tarefas onde o cliente precisa apenas receber atualizações.
\n\nNeste artigo, vamos entender como usar Server-Sent Events em JavaScript, escrever código funcional e descobrir quando o SSE é a melhor escolha e quando é melhor considerar o WebSocket. Prontos? Vamos lá!
\n\nComo funcionam os Server-Sent Events (SSE)?
\n\nTecnicamente, SSE é simplesmente uma conexão HTTP que o servidor não fecha após enviar a resposta. Em vez disso, ele envia dados em partes, usando o formato especial text/event-stream. O cliente (navegador) escuta essa conexão através do objeto EventSource e gera eventos ao receber cada nova mensagem.
Veja como é uma resposta típica do servidor:
\n\ndata: {"message": "Olá!", "timestamp": 1700000000}\n\ndata: {"message": "Nova notificação", "timestamp": 1700000001}\n\nCada mensagem começa com data:, seguido por um espaço e o conteúdo em si. As mensagens são separadas por dois caracteres de nova linha \\n\\n. O servidor também pode enviar identificadores (id:) e tipos de evento (event:), mas o conjunto mínimo é data.
A parte do cliente é ainda mais simples:
\n\nconst eventSource = new EventSource('/events');\n\neventSource.onmessage = (e) => {\n console.log('Dados recebidos:', e.data);\n};\n\neventSource.onerror = (e) => {\n console.error('Erro de conexão', e);\n};\n\nPronto! Sem handshakes complicados, sem bibliotecas — o navegador se reconecta automaticamente em caso de queda e lida com a perda de conexão. Essa é a mágica principal dos Server-Sent Events.
\n\nSSE vs WebSocket: quando escolher qual?
\n\nMuitas vezes, iniciantes pensam: "Já que SSE é mais simples, então é sempre melhor". Mas não é bem assim. Cada tecnologia tem seu nicho. Vamos comparar.
\n\n| Característica | \nSSE | \nWebSocket | \n
|---|---|---|
| Direção dos dados | \nApenas servidor → cliente | \nBidirecional | \n
| Facilidade de implementação | \nMuito simples (nativo do navegador) | \nMédia (requer biblioteca) | \n
| Reconexão automática | \nIntegrada | \nPrecisa ser implementada manualmente | \n
| Suporte dos navegadores | \nTodos os modernos (exceto IE) | \n
BlogsComo passar na entrevista de TypeScript: principais perguntas
Programação Assíncrona em Kotlin: guia completoGuia de geração de GUID/UUID em JavaScript: da teoria ao códigoBook RecommendationsLeia também
Docker e Rust: conteinerização de aplicações para produção
Monorepositório com Java: organização de código e melhores práticas
Os 10 melhores frameworks JavaScript para desenvolvimento web em 2024
|