服务器发送事件 (Server-Sent Events, SSE) 是一种可以让服务器向客户端推送数据的技术。与传统的轮询或长轮询相比,SSE 可以实现更低的延迟和更高的效率。在前端开发中,常常需要使用 SSE 来实现实时更新数据的功能。本文将介绍在 Express.js 中如何使用 SSE。
SSE 的基本原理
SSE 的基本原理是通过 HTTP 连接,在客户端和服务器之间建立一个持久连接,服务器可以在任何时候向客户端发送数据。在客户端,我们可以使用 EventSource 对象来接收服务器发送的数据。当服务器发送数据时,客户端会自动触发 message 事件,我们可以在相应的回调函数中处理数据。
在 Express.js 中使用 SSE
在 Express.js 中使用 SSE 非常简单,我们只需要使用 res.write() 和 res.flush() 方法向客户端发送数据即可。以下是一个简单的 SSE 示例:
// javascriptcn.com 代码示例 const express = require('express'); const app = express(); app.get('/sse', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); setInterval(() => { const data = new Date(); res.write(`data: ${data}\n\n`); res.flush(); }, 1000); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
在这个示例中,我们创建了一个 /sse 路由,当客户端访问该路由时,服务器将不断向客户端发送当前时间。注意,我们在响应头中设置了 Content-Type 为 text/event-stream,这是 SSE 的标准 MIME 类型。我们还设置了 Cache-Control 为 no-cache,这是为了避免浏览器缓存数据。最后,我们设置 Connection 为 keep-alive,这是为了保持连接不断开。
在 setInterval 回调函数中,我们使用 res.write() 方法向客户端发送数据,数据格式为 data: ${data}\n\n,其中 ${data} 是当前时间。注意,数据格式必须符合 SSE 的规范,即以 data: 开头,以两个换行符结尾。
SSE 的优缺点
SSE 的优点在于可以实现实时更新数据的功能,而且效率和延迟都比传统的轮询或长轮询要好。另外,SSE 的实现也比较简单,只需要使用标准的 HTTP 连接即可。
SSE 的缺点在于兼容性不太好,不支持 Internet Explorer 和 Edge 浏览器。另外,SSE 也有一些限制,例如只能单向通信,只能使用 HTTP 协议等。
总结
本文介绍了在 Express.js 中如何使用 SSE 实现实时更新数据的功能。SSE 是一种比较新的技术,虽然兼容性不太好,但在某些场景下可以实现更好的效果。希望本文能对读者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6561e11ad2f5e1655dbea092