Server-Sent Events (SSE)

Notificaciones push de servidor a cliente basadas en HTTP. Un enfoque ligero y fiable para el streaming de datos en tiempo real que funciona allí donde funciona HTTP.

¿Qué son los Server-Sent Events?

SSE ofrece una forma sencilla y estandarizada de que los servidores envíen datos a los clientes a través de una conexión HTTP persistente.

Streaming sencillo de servidor a cliente

Los Server-Sent Events utilizan una simple conexión HTTP para transmitir eventos del servidor al cliente. A diferencia de WebSocket, SSE es unidireccional — el servidor envía datos y el cliente los recibe. Esta simplicidad es su fortaleza: SSE funciona a través de proxies HTTP, balanceadores de carga y firewalls sin configuración especial. El navegador (o la biblioteca cliente) gestiona la reconexión automáticamente y los IDs de evento permiten reanudar sin problemas tras una desconexión. sgcWebSockets ofrece un cliente SSE completo que se integra de forma natural con las aplicaciones Delphi.

  • Usa HTTP estándar — sin configuración especial del servidor
  • Reconexión automática con intervalos de reintento configurables
  • IDs de evento para reanudar desde donde lo dejaste
  • Funciona a través de proxies, firewalls y CDNs
SERVER CLIENT text/event-stream data: {"event": "..."}

Características de SSE

Notificaciones push de servidor a cliente sencillas pero potentes.

Streaming unidireccional

Solo de servidor a cliente — la arquitectura en tiempo real más simple posible. Cuando solo necesitas enviar datos a los clientes, SSE es la opción ideal.

Reconexión automática

Lógica de reconexión integrada con intervalos de reintento configurables. El cliente se reconecta automáticamente cuando se cae la conexión.

IDs de evento para reanudar

Cada evento puede llevar un ID. Tras la reconexión, el cliente envía el último ID de evento para que el servidor pueda reanudar desde donde lo dejó.

text/event-stream

Tipo MIME estándar y formato de texto sencillo. Los eventos son texto plano con tipos de evento con nombre opcionales, lo que los hace fáciles de generar y analizar.

Compatible con proxies y firewalls

Usa HTTP estándar, así que SSE funciona a través de proxies corporativos, firewalls y CDNs sin configuración especial ni apertura de puertos.

Fallback de WebSocket

Usa SSE como fallback ligero en entornos donde las conexiones WebSocket están bloqueadas o restringidas.

Casos de uso de SSE

Escenarios donde solo necesitas push unidireccional del servidor.

Feeds en directo

Transmite noticias en directo, actualizaciones de redes sociales y feeds de contenido a las aplicaciones con entrega push en tiempo real.

Cotizaciones bursátiles

Envía precios bursátiles en tiempo real, datos de mercado y alertas de trading a las aplicaciones cliente con latencia mínima.

Sistemas de notificaciones

Entrega notificaciones, alertas y mensajes del sistema en tiempo real a los usuarios sin polling ni recarga manual.

Streaming de logs

Transmite logs de aplicación, eventos de servidor y salida de depuración en tiempo real para monitorización y resolución de problemas.

Actualizaciones de estado de build

Envía el estado del pipeline CI/CD, el progreso de los builds y notificaciones de despliegue a los paneles de desarrollo en tiempo real.

Ejemplo Delphi SSE

Conecta a un endpoint SSE y recibe los eventos enviados por el servidor.

uses
  sgcSSE_Client, sgcSSE_Classes;

var
  SSEClient: TsgcSSEClient;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SSEClient := TsgcSSEClient.Create(nil);
  SSEClient.URL := 'https://api.example.com/events';

  // Configure reconnection
  SSEClient.Options.RetryInterval := 3000;
  SSEClient.Options.AutoReconnect := True;

  // Set up event handlers
  SSEClient.OnSSEConnect := OnSSEConnect;
  SSEClient.OnSSEEvent := OnSSEEvent;
  SSEClient.OnSSEDisconnect := OnSSEDisconnect;
end;

procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
  SSEClient.Connect;
end;

procedure TForm1.OnSSEConnect(Sender: TObject);
begin
  Memo1.Lines.Add('Connected to SSE stream');
end;

procedure TForm1.OnSSEEvent(Sender: TObject;
  aEventName, aData, aLastEventId: string);
begin
  // Handle incoming server-sent events
  if aEventName = 'price-update' then
    UpdatePrice(aData)
  else if aEventName = 'notification' then
    ShowNotification(aData)
  else
    Memo1.Lines.Add(aEventName + ': ' + aData);
end;

procedure TForm1.OnSSEDisconnect(Sender: TObject);
begin
  // Auto-reconnect will handle reconnection
  Memo1.Lines.Add('Disconnected. Reconnecting...');
end;

¿Listo para empezar con SSE?

Descarga la prueba gratuita y empieza a recibir eventos enviados por el servidor en minutos.