以下是一个使用Node.js和Express框架来实现SSE(Server-Sent Events)的示例代码:
const express = require('express');
const app = express();
// 用于存储连接的客户端
let clients = [];
// SSE路由
app.get('/sse', (req, res) => {
// 设置头部
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
res.setHeader('Access-Control-Allow-Origin', '*');
// 发送初始数据给客户端
res.write('data: Connected\n\n');
// 添加客户端到数组
clients.push(res);
// 当客户端关闭连接时,从数组中移除
req.on('close', () => {
clients = clients.filter(client => client !== res);
});
});
// 定期向所有客户端发送消息
setInterval(() => {
const message = new Date().toLocaleTimeString();
// 向所有客户端发送消息
clients.forEach(client => {
client.write(`data: ${message}\n\n`);
});
}, 1000);
// 启动服务器
const port = 3000;
app.listen(port, () => {
console.log(`Server started on port ${port}`);
});
这个示例代码创建了一个SSE路由/sse
,客户端可以通过访问该路由来建立SSE连接。当一个客户端连接时,它会被添加到clients
数组中,当客户端关闭连接时,它会从数组中移除。
服务器会每秒向所有客户端发送一个带有当前时间的消息。在setInterval
函数中,可以根据自己的需求更改发送的消息内容和频率。
要运行这个示例代码,需要先安装Node.js和Express(使用npm install express
命令)。然后,将代码保存到一个名为app.js
的文件中,并使用node app.js
命令来启动服务器。最后,通过访问http://localhost:3000/sse
来与服务器建立SSE连接。