简介
Server-Sent Events (SSE) 是一种实现服务器到浏览器单向实时通信的技术。它是一种轻量级的协议,可以在不使用 WebSocket 的情况下实现实时通信。SSE 的优点是可以使用简单的 HTTP 连接,不需要额外的协议或库,可以在现有的基础设施上使用。
在本文中,我们将介绍如何在 Node.js 和 Express 应用程序中使用 SSE。我们将使用纯 JavaScript 和 Node.js 内置的 http 模块来实现它。
实现 SSE
1. 创建 HTTP 服务器
我们首先需要创建一个 HTTP 服务器,这样我们才能够向客户端发送 SSE 事件。在 Node.js 中创建 HTTP 服务器非常简单,我们只需要使用 http 模块的 createServer() 方法即可。
// javascriptcn.com 代码示例 const http = require('http'); const server = http.createServer((req, res) => { // handle requests }); server.listen(3000, () => { console.log('Server started on port 3000'); });
2. 发送 SSE 事件
SSE 事件是由服务器发送到客户端的,客户端通过监听这些事件来接收实时的数据。要发送 SSE 事件,我们需要设置响应头,告诉客户端这是一个 SSE 事件流。我们还需要将数据格式化为 SSE 格式,并将其写入响应体中。
// javascriptcn.com 代码示例 const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/event-stream', // set content type to Event Stream 'Cache-Control': 'no-cache', // disable caching 'Connection': 'keep-alive', // keep the connection open }); setInterval(() => { const data = `data: ${new Date().toISOString()}\n\n`; // format data as SSE event res.write(data); // write data to response body }, 1000); }); server.listen(3000, () => { console.log('Server started on port 3000'); });
3. 客户端监听 SSE 事件
客户端通过创建一个 EventSource 对象来监听 SSE 事件。EventSource 对象会自动向服务器发送一个 HTTP 请求,并保持连接打开,以便服务器可以随时发送事件。
const eventSource = new EventSource('/sse'); eventSource.addEventListener('message', (event) => { console.log(event.data); // handle incoming data });
4. 在 Express 中使用 SSE
如果你正在使用 Express 框架,你可以使用 res.sse() 方法来发送 SSE 事件。这个方法会自动设置响应头和格式化数据,使得发送 SSE 事件更加简单。
// javascriptcn.com 代码示例 const express = require('express'); const app = express(); app.get('/sse', (req, res) => { res.sseSetup(); // set up SSE headers setInterval(() => { const data = new Date().toISOString(); res.sseSend(data); // send SSE event }, 1000); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
总结
在本文中,我们介绍了如何在 Node.js 和 Express 应用程序中使用 Server-Sent Events 技术。我们使用了纯 JavaScript 和 Node.js 内置的 http 模块来实现它。我们还介绍了如何在 Express 中使用 res.sse() 方法来发送 SSE 事件,使得发送 SSE 事件更加简单。希望本文能够帮助你实现实时通信功能。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653b8eb57d4982a6eb5e4088