Delphi Server-Sent Events 客户端
基于 HTTP 的服务器到客户端推送通知。一种轻量、可靠的实时数据流方式,在 HTTP 能工作的地方皆可使用。
基于 HTTP 的服务器到客户端推送通知。一种轻量、可靠的实时数据流方式,在 HTTP 能工作的地方皆可使用。
SSE 提供了一种简单、标准化的方式,让服务器通过持久 HTTP 连接向客户端推送数据。
服务器推送事件使用简单的 HTTP 连接将事件从服务器流式传输到客户端。与 WebSocket 不同,SSE 是单向的 — 服务器发送数据,客户端接收数据。这种简单性正是其优势:SSE 无需任何特殊配置即可穿越 HTTP 代理、负载均衡器和防火墙。浏览器(或客户端库)自动处理重连,事件 ID 机制可在断线后无缝恢复。sgcWebSockets 提供完整的 SSE 客户端,可与 Delphi 应用程序自然集成。
简单而强大的服务器到客户端推送通知。
仅支持服务器到客户端 — 最简单的实时架构。当您只需要向客户端推送数据时,SSE 是理想选择。
内置重连逻辑,重试间隔可配置。连接断开时客户端自动重新连接。
每个事件可携带 ID。重连后,客户端发送最后收到的事件 ID,服务器可从中断处继续推送。
标准 MIME 类型和简单文本格式。事件为纯文本,可选命名事件类型,易于生成和解析。
使用标准 HTTP,SSE 无需特殊配置或开放端口即可穿越企业代理、防火墙和 CDN。
在 WebSocket 连接被阻止或受限的环境中,将 SSE 用作轻量级降级方案。
TsgcSSEParser 可读取以任意大小的分块方式传入的 text/event-stream,因此同一段代码既能处理 LLM 流式响应,也能处理 MCP Streamable HTTP。
只需服务器单向推送即可满足需求的场景。
通过实时推送将实时新闻、社交媒体更新和内容信息流传输到应用程序。
以极低延迟向客户端应用程序推送实时股价、市场数据和交易提醒。
无需轮询或手动刷新,向用户实时推送通知、警报和系统消息。
实时流式传输应用程序日志、服务器事件和调试输出,用于监控和故障排查。
实时向开发者仪表盘推送 CI/CD 流水线状态、构建进度和部署通知。
连接到 SSE 端点并接收服务器推送事件。
uses
sgcHTTP_SSE_Client;
var
SSEClient: TsgcSSEClient;
procedure TForm1.FormCreate(Sender: TObject);
begin
SSEClient := TsgcSSEClient.Create(Self);
SSEClient.URL := 'https://api.example.com/events';
// Configure reconnection
SSEClient.ReconnectOptions.Interval := 3000;
SSEClient.ReconnectOptions.Backoff := True;
SSEClient.ReconnectOptions.MaxInterval := 30000;
// Set up event handlers
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
// The client sends LastEventId, so the stream resumes where it stopped
Memo1.Lines.Add('Reconnecting, attempt ' + IntToStr(aAttempt));
end;