Delphi Server-Sent Events Client
HTTP-basierte Server-zu-Client-Push-Benachrichtigungen. Ein leichtgewichtiger, zuverlässiger Ansatz für Echtzeit-Datenstreaming — überall einsetzbar, wo HTTP funktioniert.
HTTP-basierte Server-zu-Client-Push-Benachrichtigungen. Ein leichtgewichtiger, zuverlässiger Ansatz für Echtzeit-Datenstreaming — überall einsetzbar, wo HTTP funktioniert.
SSE bietet eine einfache, standardisierte Methode, mit der Server Daten über eine persistente HTTP-Verbindung an Clients pushen.
Server-Sent Events nutzen eine einfache HTTP-Verbindung, um Ereignisse vom Server zum Client zu streamen. Anders als WebSocket ist SSE unidirektional — der Server sendet Daten, der Client empfängt sie. Diese Einfachheit ist seine Stärke: SSE funktioniert ohne Sonderkonfiguration durch HTTP-Proxys, Load Balancer und Firewalls. Der Browser (oder die Client-Bibliothek) übernimmt die Wiederverbindung automatisch, und Event-IDs ermöglichen nahtloses Wiederaufsetzen nach einer Trennung. sgcWebSockets bietet einen vollständigen SSE-Client, der sich natürlich in Delphi-Anwendungen integriert.
Einfache, aber leistungsstarke Server-zu-Client-Push-Benachrichtigungen.
Nur vom Server zum Client — die einfachste denkbare Echtzeit-Architektur. Wenn du nur Daten an Clients pushen musst, ist SSE die ideale Wahl.
Eingebaute Wiederverbindungslogik mit konfigurierbaren Retry-Intervallen. Der Client verbindet sich bei Abbruch automatisch erneut.
Jedes Ereignis kann eine ID tragen. Nach der Wiederverbindung sendet der Client die letzte Event-ID, sodass der Server an genau dieser Stelle weitermachen kann.
Standard-MIME-Typ und einfaches Textformat. Ereignisse sind reiner Text mit optionalen benannten Event-Typen — einfach zu erzeugen und zu parsen.
Nutzt Standard-HTTP, daher funktioniert SSE durch Unternehmens-Proxys, Firewalls und CDNs — ohne Sonderkonfiguration oder geöffnete Ports.
Nutze SSE als leichtgewichtigen Fallback in Umgebungen, in denen WebSocket-Verbindungen blockiert oder eingeschränkt sind.
TsgcSSEParser liest jeden text/event-stream, der ihm in Chunks zugeführt wird, sodass derselbe Code sowohl LLM-Streaming-Antworten als auch MCP Streamable HTTP verarbeitet.
Szenarien, in denen unidirektionaler Server-Push alles ist, was du brauchst.
Streame Live-News, Social-Media-Updates und Content-Feeds in Echtzeit per Push-Zustellung an Anwendungen.
Pushe Echtzeit-Aktienkurse, Marktdaten und Trading-Alerts mit minimaler Latenz an Client-Anwendungen.
Stelle Benutzern Echtzeit-Benachrichtigungen, Warnungen und Systemmeldungen zu — ohne Polling oder manuelles Aktualisieren.
Streame Anwendungs-Logs, Serverereignisse und Debug-Ausgaben in Echtzeit für Monitoring und Fehlersuche.
Pushe CI/CD-Pipeline-Status, Build-Fortschritt und Deployment-Benachrichtigungen in Echtzeit an Entwickler-Dashboards.
Verbinde dich mit einem SSE-Endpunkt und empfange vom Server gepushte Ereignisse.
uses
sgcHTTP_SSE_Client;
var
SSEClient: TsgcSSEClient;
procedure TForm1.FormCreate(Sender: TObject);
begin
SSEClient := TsgcSSEClient.Create(Self);
SSEClient.URL := 'https://api.example.com/events';
// Wiederverbindung konfigurieren
SSEClient.ReconnectOptions.Interval := 3000;
SSEClient.ReconnectOptions.Backoff := True;
SSEClient.ReconnectOptions.MaxInterval := 30000;
// Event-Handler einrichten
SSEClient.OnOpen := OnSSEOpen;
SSEClient.OnEvent := OnSSEEvent;
SSEClient.OnReconnect := OnSSEReconnect;
end;
procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
SSEClient.Open;
end;
procedure TForm1.OnSSEOpen(Sender: TObject);
begin
Memo1.Lines.Add('Connected to SSE stream');
end;
procedure TForm1.OnSSEEvent(Sender: TObject; const aEvent: TsgcSSEEvent);
begin
// Handle incoming server-sent events
if aEvent.EventType = 'price-update' then
UpdatePrice(aEvent.Data)
else if aEvent.EventType = 'notification' then
ShowNotification(aEvent.Data)
else
Memo1.Lines.Add(aEvent.EventType + ': ' + aEvent.Data);
end;
procedure TForm1.OnSSEReconnect(Sender: TObject; aAttempt: Integer;
var aDelay: Integer; var aCancel: Boolean);
begin
// Der Client sendet die LastEventId, sodass der Stream dort fortgesetzt wird, wo er unterbrochen wurde
Memo1.Lines.Add('Reconnecting, attempt ' + IntToStr(aAttempt));
end;