Eventos Server-Sent em HTML

Eventos Server-Sent permitem que a página web receba atualizações do servidor.

Eventos Server-Sent - Mensagens de Um jeito

Eventos Server-Sent são eventos que permitem que a página web receba atualizações automaticamente do servidor.

Isso também pode ser feito anteriormente, desde que a página web tenha que perguntar se há atualizações disponíveis. Com eventos Server-Sent, as atualizações podem chegar automaticamente.

Por exemplo: atualizações do Facebook/Twitter, atualizações de ações, novos posts, resultados de eventos, etc.

Suporte do navegador

Os números na tabela indicam os primeiros navegadores que suportam eventos server-sent.

API
SSE 6.0 Não suporta 6.0 5.0 11.5

Receber notificações de eventos Server-Sent

O objeto EventSource é usado para receber notificações de eventos de envio de servidor:

Exemplo

var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
    document.getElementById("result").innerHTML += event.data + "<br>";
};

Experimente você mesmo

Explicação do exemplo:

  • Crie um novo objeto EventSource e especifique a URL da página que envia as atualizações (no exemplo, "demo_sse.php")
  • Cada vez que uma atualização for recebida, o evento onmessage ocorrerá
  • Quando o evento onmessage ocorrer, insira os dados recebidos no elemento com id "result"

Detectar suporte a eventos Server-Sent

No exemplo do TIY, escrevemos um código adicional para detectar o suporte do navegador aos eventos de envio de servidor:

if(typeof(EventSource) !== "undefined") {
    // Sim! Suporta eventos de envio de servidor!
    // Alguns códigos.....
} else {
    // Desculpe! Não suporta eventos de envio de servidor!
}

Exemplo de código no lado do servidor

Para que o exemplo anterior funcione, você precisa de um servidor que possa enviar atualizações de dados (por exemplo, PHP ou ASP).

A sintaxe do fluxo de eventos do servidor é muito simples. Defina o cabeçalho "Content-Type" como "text/event-stream". Agora, você pode começar a enviar o fluxo de eventos.

Código em PHP (demo_sse.php):

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$time = date('r');
echo "data: The server time is: {$time}\n\n";
flush();
?>

Código em ASP (VB) (demo_sse.asp):

<%
Response.ContentType = "text/event-stream"
Response.Expires = -1
Response.Write("data: The server time is: " & now())
Response.Flush()
%>

Explicação do código:

  • Definir o cabeçalho "Content-Type" como "text/event-stream"
  • Especificar que a página não deve ser cacheada
  • Especificar a data a ser enviada (sempre começando com "data: ")
  • Enviar dados de atualização da página para a web

Objeto EventSource

No exemplo acima, usamos o evento onmessage para obter mensagens. No entanto, também podem ser usados outros eventos:

Evento Descrição
onopen Quando a conexão com o servidor é aberta
onmessage Quando recebe uma mensagem
onerror Quando ocorre um erro