在 Node.js 应用中实现 Server-sent Events 的详细教程

· 约 5 分钟读完

Server-sent Events(SSE)是一种轻量级的、基于HTTP协议的服务器推送技术,它允许服务器向客户端推送数据,而无需客户端发起请求。在前端开发中,SSE可以用于实现实时更新、在线聊天、通知提醒等功能。

本文将介绍如何在Node.js应用中实现SSE,包括SSE的原理、SSE的使用方法、SSE的优缺点以及示例代码。

SSE的原理

SSE的原理基于HTTP协议中的长连接(long-polling)。在传统的HTTP请求中,客户端向服务器发起请求,服务器返回响应后连接即关闭。而在SSE中,客户端向服务器发起请求,服务器返回一个持久连接,然后服务器会不断地向客户端发送数据,直到连接关闭。

SSE的数据格式为文本(text/event-stream),并以“data: ”作为前缀,以“\n\n”作为结尾的一系列数据块组成。例如:

客户端通过监听事件源(EventSource)的onmessage事件来接收服务器发送的数据。例如:

SSE的使用方法

在Node.js应用中实现SSE,需要使用到一个名为“sse-express”的Node模块。该模块提供了一个中间件函数,用于处理SSE请求。

首先,我们需要安装sse-express模块:

然后,在Node.js应用中引入sse-express模块,并使用sse-express中间件函数处理SSE请求。例如:

在上述代码中,我们创建了一个路由处理器,用于处理“/sse”路径的请求。该路由处理器使用sse-express中间件函数处理请求,并在每秒钟向客户端发送当前时间。

SSE的优缺点

SSE相比于其他服务器推送技术(如WebSocket)具有以下优点:

  • SSE基于HTTP协议,无需额外的协议支持,可以直接使用现有的Web服务器。
  • SSE使用简单,只需要使用EventSource对象监听onmessage事件即可。
  • SSE支持跨域请求,可以在不同的域名之间进行通信。

但SSE也存在一些缺点:

  • SSE只能实现单向通信,即服务器向客户端发送数据,无法实现双向通信。
  • SSE的数据传输格式为文本,无法传输二进制数据。
  • SSE的兼容性存在问题,在一些老版本的浏览器中可能无法正常工作。

示例代码

完整的示例代码如下,可以在本地运行并测试SSE功能:

在运行示例代码前,需要先安装sse-express模块。在命令行中执行以下命令:

然后在命令行中执行以下命令启动服务器:

在浏览器中打开“http://localhost:3000/”即可测试SSE功能。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d15c9ca941bf71342e5c83