在现代 Web 应用中,实时通知已经成为了必要的功能之一。Server-Sent Events (SSE) 是一种在 Web 应用中实现实时通知的技术。相比于 WebSocket,SSE 更加轻量级和易于实现。本文将介绍如何在 Node.js 中使用 SSE 实现实时通知。
什么是 Server-Sent Events
Server-Sent Events 是一种 Web 技术,允许服务器向客户端推送消息。SSE 基于 HTTP 协议,利用长轮询机制(long-polling)实现实时通知。与 WebSocket 相比,SSE 更加轻量级和易于实现,因此在某些场景下更加适用。
SSE 的核心概念是“事件流”(event stream)。事件流是一个持续不断的数据流,由服务器推送事件组成。每个事件由一个标识符、一个可选的事件类型和一个数据字段组成。客户端通过监听事件流,即可实现实时通知。
如何使用 Server-Sent Events
在 Node.js 中,我们可以使用 sse
模块来实现 SSE 功能。首先,我们需要使用 sse
模块创建一个 SSE 服务器:
-- -------------------- ---- ------- ----- --- - --------------- ----- ------ - ----------------------- ---- -- - ------------------ - --------------- -------------------- ---------------- ----------- ------------- ------------ --- ----- ------ - --------- ---
在上面的代码中,我们使用 http
模块创建一个 HTTP 服务器,并设置响应头,告诉客户端返回的是 SSE 数据。然后,我们使用 sse
模块创建一个 SSE 实例 client
,并将响应对象 res
作为参数传入。
接下来,我们可以使用 sse
实例的 send()
方法向客户端发送事件:
client.send({ event: 'message', data: 'Hello, world!' });
在上面的代码中,我们向客户端发送了一个名为 message
的事件,数据为 Hello, world!
。
客户端可以通过监听 message
事件来接收数据:
const source = new EventSource('/sse'); source.addEventListener('message', (event) => { console.log(event.data); });
在上面的代码中,我们使用 EventSource
对象监听 /sse
路径的事件流,并通过 addEventListener()
方法监听 message
事件。当服务器发送 message
事件时,客户端的回调函数将会被调用,并打印出接收到的数据。
示例代码
下面是一个完整的示例代码,演示了如何使用 SSE 实现一个实时聊天室:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- --- - --------------- ----- ------ - ----------------------- ---- -- - -- -------- --- -------- - ------------------ - --------------- -------------------- ---------------- ----------- ------------- ------------ --- ----- ------ - --------- ------------- ------ ---------- ----- ---------- --- ------------------ -- -- - ------------------- ---------------- --- -------------- ------- -- - ----- ------- - ------------------------ -- --------- - ------------- ------ ---------- ----- ------- --- - --- - ---- - ------------------- ---------- - --- ------------------- -- -- - ------------------- ------- -- ---- -------- ---
在上面的代码中,我们创建了一个 HTTP 服务器,并监听 /chat
路径的请求。当客户端请求 /chat
路径时,我们返回 SSE 数据,并创建一个 SSE 实例 client
。
在 client
实例创建后,我们向客户端发送一个欢迎消息。客户端可以通过监听 message
事件来接收消息,并通过 POST 请求将消息发送给服务器。
总结
本文介绍了如何在 Node.js 中使用 Server-Sent Events 实现实时通知。相比于 WebSocket,SSE 更加轻量级和易于实现,适用于某些场景下的实时通知需求。希望本文对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65faefb3d10417a2226a9641