服务器推送事件(SSE)

基于 HTTP 的服务器到客户端推送通知。一种轻量、可靠的实时数据流方式,在 HTTP 能工作的地方皆可使用。

什么是服务器推送事件?

SSE 提供了一种简单、标准化的方式,让服务器通过持久 HTTP 连接向客户端推送数据。

简单的服务器到客户端流式传输

服务器推送事件使用简单的 HTTP 连接将事件从服务器流式传输到客户端。与 WebSocket 不同,SSE 是单向的 — 服务器发送数据,客户端接收数据。这种简单性正是其优势:SSE 无需任何特殊配置即可穿越 HTTP 代理、负载均衡器和防火墙。浏览器(或客户端库)自动处理重连,事件 ID 机制可在断线后无缝恢复。sgcWebSockets 提供完整的 SSE 客户端,可与 Delphi 应用程序自然集成。

  • 使用标准 HTTP — 无需特殊服务器配置
  • 可配置重试间隔的自动重连
  • 通过事件 ID 从中断处恢复
  • 可穿透代理、防火墙和 CDN
SERVER CLIENT text/event-stream data: {"event": "..."}

SSE 特性

简单而强大的服务器到客户端推送通知。

单向流式传输

仅支持服务器到客户端 — 最简单的实时架构。当您只需要向客户端推送数据时,SSE 是理想选择。

自动重连

内置重连逻辑,重试间隔可配置。连接断开时客户端自动重新连接。

事件 ID 恢复

每个事件可携带 ID。重连后,客户端发送最后收到的事件 ID,服务器可从中断处继续推送。

text/event-stream

标准 MIME 类型和简单文本格式。事件为纯文本,可选命名事件类型,易于生成和解析。

代理与防火墙友好

使用标准 HTTP,SSE 无需特殊配置或开放端口即可穿越企业代理、防火墙和 CDN。

WebSocket 降级方案

在 WebSocket 连接被阻止或受限的环境中,将 SSE 用作轻量级降级方案。

SSE 使用案例

只需服务器单向推送即可满足需求的场景。

实时信息流

通过实时推送将实时新闻、社交媒体更新和内容信息流传输到应用程序。

股票行情

以极低延迟向客户端应用程序推送实时股价、市场数据和交易提醒。

通知系统

无需轮询或手动刷新,向用户实时推送通知、警报和系统消息。

日志流式传输

实时流式传输应用程序日志、服务器事件和调试输出,用于监控和故障排查。

构建状态更新

实时向开发者仪表盘推送 CI/CD 流水线状态、构建进度和部署通知。

Delphi SSE 示例

连接到 SSE 端点并接收服务器推送事件。

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;

准备好使用 SSE 了吗?

下载免费试用版,几分钟内即可开始接收服务器推送事件。