Server-Sent Events (SSE):为你的应用获取实时更新
发布日期:2026-04-22来源: 返回列表 >>

如果你曾经开发过数据仪表盘或者运维监控大屏,那你肯定对这种痛点不陌生。你希望屏幕上显示的数字能实时反映服务器端的真实情况,但与此同时,你又不想写一个每秒都发请求的轮询循环,持续高频施压后端服务。


对于大量以更新为主的场景,更好的方法是服务器发送事件(SSE):一种基于标准HTTP的方法,允许服务器保持一个连接打开,并在事件发生时向客户端流式传输更新。RAD Studio 13.1最近在服务器和客户端都添加了对此的支持,因此我们构建了一个小型的概念验证,以展示端到端的实现效果。


SSE是什么意思?

SSE背后的想法很简单。客户端打开一个正常的HTTP连接并保持连接状态。服务器不像普通的网页那样发送响应并关闭连接,而是保持连接,并在发生值得报告的事情时将数据推送到用户的浏览器或应用程序。客户端在每个块到达时进行处理,并相应地更新用户界面。

SSE 在这种场景下大放异彩:服务器知道客户端需要查看的内容,而客户端的主要工作就是显示这些内容。实时指标、图形数据、作业进度、通知、日志尾部…… 对于这些任何一种情况,SSE 都是天然的解决方案,并且比完整的 WebSocket 设置更简单易行。

WebSockets在你需要在初始内容相同的频道上进行高频率的双向通信,或者你在构建具有复杂双向协议的系统时非常有用。但对于服务器到客户端的更新,SSE 通常是更干净、更优化的选择:

  • 运行在普通的HTTP上,不需要特殊的协议。

  • 每个浏览器内置重连接,使用RAD Studio时通过THTTPEventSource实现。

  • 命名事件类型使客户端逻辑保持简单和明确。

RAD Studio中的SSE:基础知识

让我们看看在RAD Studio 13.1中使SSE工作的所需代码。多亏了新的System.Net.HttpSse单元和WebBroker更新,实现起来非常简单。

服务器端 (WebBroker)

要将标准的HTTP响应转换为流式SSE连接,您需要使用TWebResponseStream.BeginEventsStream来升级响应。从那时起,只要客户端保持连接,您只需在循环中写入您的事件。

image.png

客户端 (THTTPEventSource)

在客户端,您使用新的THTTPEventSource。它在后台处理HTTP连接并排队接收事件。您的工作只是从队列中取出并读取数据。

image.png

既然你已经看到了基础的机制,让我们来看看我们如何在此基础上扩展到一个更高级的系统,具有自定义时间、后台线程和多个事件通道。

服务器端事件 (SSE) 演示

image.png


详细内容请参考:Server-Sent Events (SSE): Getting Real-Time Updates in Your Apps