简介
SSE(Server-Sent Events)是一种服务器向客户端实时推送数据的机制,能够使浏览器与服务器进行长时间的单向通信。与 WebSocket 不同,SSE 基于传统的 HTTP 协议,可以使用在所有支持 HTTP 协议的浏览器中使用。SSE 借助了浏览器独特的 EventSource 接口实现了对实时数据的推送。在 Node.js 中,可用EventSource库来实现 SSE。
实现步骤
- 服务端使用 http.createServer 方法创建一个 HTTP 服务器。
- 在服务器端响应请求的同时,启用 SSE 的支持,设置响应头 Content-Type 为 "text/event-stream"。
- 利用 Node.js 的定时器机制,将需要推送的数据以 SSE 规范的方式推送到客户端。
代码实现
服务端(Node.js)
以下代码实现了一个基本的 SSE 服务器。当客户端发起 /events 的请求时,服务器开始向客户端推送数据。
----- ---- - ---------------- ----- ---- - ----- ----- ------ - ----------------------- ---- -- - -- -------- --- ---------- - ------------------ - --------------- -------------------- ---------------- ----------- ------------- ------------ --- -------------- -- - ----------------- --------- ---------------- - - --- --------------------------- - -------- -- ------ - ---- - ------------------- ---------- - --- ------------------- -- -- - ------------------- ------- -- --------------------------- ---
客户端(HTML/JavaScript)
以下代码实现了 SSE 客户端的部分代码。当页面加载时,客户端发起了向 /events 的请求。同时,客户端设定了一个 EventSource 对象,用于监听服务端推送的数据。
--------- ----- ------ ------ ----- ---------------- ---------- --------------- ------- ------ ------- ------------ ---- ------------------ -------- ----- ------ - --- ----------------------- ---------------- - --------------- - ----- ------ - ---------------------------------- ----- ---------- - ------------------------------ -------------------- - ------- - - ----------- ------------------------------- -- --------- ------- -------
总结
在 Node.js 中实现 SSE 可以帮助我们实现实时推送数据,并允许不同浏览器的客户端之间进行双向通信。此外,SSE 可以替代轮询机制,有效地减少服务器的负载。通过借助 Node.js 的定时器机制,实现 SSE 也非常简单。需要注意的是,在使用 SSE 构建应用程序时,安全问题必须得到考虑,例如 XSS 攻击和 CSRF 攻击的风险等。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6650af60d3423812e4369639