Sobes.tech
Middle+

Para que foram introduzidos os eventos server-sent no HTML5?

sobes.tech IA

Resposta da IA

Para implementar um canal de comunicação unidirecional entre o servidor e o cliente. O servidor pode enviar dados ao cliente a qualquer momento após estabelecer a ligação.

Características e vantagens principais:

  • Eficiência: Utiliza uma ligação HTTP normal, minimizando os custos em comparação com o sondagem.
  • Simplicidade: A API de eventos enviados pelo servidor (SSE) é mais simples de usar do que WebSockets para comunicação unidirecional.
  • Reconexão automática: O navegador tenta reconectar-se automaticamente se a ligação for interrompida.
  • Suporte de tipos de dados: Envio de dados de texto no formato text/event-stream.
  • Compatibilidade com navegadores: Amplamente suportado por navegadores modernos.

Aplicações:

  • Atualização em tempo real de feeds de notícias.
  • Notificações de eventos (por exemplo, novas mensagens).
  • Monitorização de dados em tempo real (por exemplo, cotações de bolsa).
  • Progresso de tarefas longas.

Isto é uma alternativa ao sondagem tradicional, onde o cliente solicita periodicamente ao servidor se há atualizações. Ao contrário do WebSockets, o SSE é unidirecional, o que simplifica a sua utilização quando os dados são transmitidos apenas do servidor para o cliente.

Exemplo do lado do cliente (JavaScript):

const eventSource = new EventSource('/events'); // URL para receber eventos do servidor

eventSource.onmessage = function(event) {
  // Processamento dos dados recebidos
  console.log('Mensagem recebida:', event.data);
};

eventSource.onerror = function(error) {
  // Tratamento de erros de ligação
  console.error('Erro em Server-Sent Events:', error);
};

eventSource.addEventListener('customEvent', function(event) {
  // Processamento de evento personalizado de tipo 'customEvent'
  console.log('Evento personalizado recebido:', event.data);
});

Exemplo do formato de dados do lado do servidor:

event: customEvent
data: {"message": "Olá!"}

data: Mensagem de texto simples

id: 123 // Identificador do evento, usado para reconexão automática

retry: 5000 // Atraso antes da próxima reconexão em milissegundos