Server-Sent Events(SSE)是一种 HTML5 技术,允许服务器向客户端(通常是浏览器)推送数据。SSE 是一种轻量级的数据推送机制,不需要客户端像 WebSocket 那样实现复杂的协议,比传统的 AJAX 轮询更加高效。
本文将介绍如何在 Node.js 应用程序中实现 SSE 并向客户端推送数据。我们将演示一个使用 Express 和 Node.js 原生 HTTP 模块创建的简单实现。
基础准备
在使用 SSE 前,需要在客户端打开一个 EventSource 对象,该对象就像一个 HTTP 连接,接收持久性的服务器推送事件流。 EventSource 构造函数接收一个 URL,用于建立与服务器的连接。
const eventSource = new EventSource('/events');
服务端实现
服务端实现简单,我们创建一个路由处理程序,用于处理客户端 SSE 连接,并向客户端发送事件流。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------ - ----------------- --------------------- ------------- ---- ----- - -- -- --- --- ----------------------------- --------------------- ------------------------------ ------------ --------------------------- -------------- -- ------------------ ---------------- -- - - ----------- ----- ------ - -------------- -- - ---------------- - - --- -------------------- - -------- -- ------ -- -- --- -- --------------- -- -- - ---------------------- ---------- --- --- -------------- - -------
服务端路由处理程序会向客户端发送 SSE 事件流,使用 SSE 的主要标志是响应的 Content-Type:text/event-stream。
通过设置 SSE 的消息头信息,我们告诉客户端连接类型、缓存策略和连接类型。然后我们发送一个空行,以保证连接开始。客户端与服务器建立连接后,就可以接收到服务器推送的事件流。
在 setInterval 中,每 5 秒发送一次事件流到客户端。注意每个数据行用\n\n分隔。
当客户端关闭连接时,通过监听 req 的 close 事件,我们销毁对应的 SSE 连接。
客户端实现
在客户端打开 EventSource 对象之后,我们需要监听 onmessage 事件以接收来自服务器的事件流。
const eventSource = new EventSource('/events'); eventSource.onmessage = function(event) { console.log(event.data); };
在这个简单的示例中,我们使用 console.log 来输出来自服务器的消息。
总结
SSE 提供了一种简单、轻量级的数据推送机制,可以方便地向客户端推送事件流。本文演示了如何在 Node.js 应用程序中实现 SSE,以及如何在客户端使用 EventSource 监听服务器推送的事件流。在实际项目中,您可以使用 SSE 为客户端提供实时数据更新,带来更好的用户体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fad40df6b2d6eab319fd8f