使用Node.js实现简单的SSE服务器

SSE服务器与Node.js的结合

SSE(Server-Sent Events) 是一种允许服务器将实时数据推送到客户端的技术,适用于构建实时更新的Web应用,如股票报价、在线聊天或实时图表。Node.js非常适合实现SSE,因其具备非阻塞I/O和事件驱动特性,能够高效处理并发连接。

Node.js简介

Node.js基于Chrome V8引擎,由Ryan Dahl于2009年创建,是开发人员构建网络应用的友好平台。其事件驱动、非阻塞I/O模型使其适合高并发需求的应用场景。

SSE的工作原理

SSE通过在HTTP连接上持续发送数据流实现单向推送。当浏览器发送请求,服务器保持连接并在需要时发送数据。浏览器解析数据并触发事件。SSE使用 eventstream 作为MIME类型,并通过换行符分隔事件。

创建简单的Node.js SSE服务器

const http = require('http');
const server = http.createServer((req, res) => {
  // 设置响应头,告知浏览器这是SSE
  res.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    Connection: 'keep-alive'
  });
  // 每秒发送一次时间戳
  setInterval(() => {
    res.write(`data: ${Date.now()}

`);
  }, 1000);
});
server.listen(3000, () => {
  console.log('SSE服务器运行在 http://localhost:3000');
});

在此示例中,服务器每秒向客户端发送时间戳,客户端可以监听“data”事件以接收更新。

客户端处理SSE事件

在客户端使用 EventSource 对象来接收SSE事件,以下是基本HTML页面:

<!DOCTYPE html>

<html>
<head>
  <title>SSE客户端</title>
</head>
<body>
  

实时时间

[removed] const source = new EventSource('http://localhost:3000'); source.onmessage = function(event) { document.getElementById('time').innerText = event.data; }; [removed] </body> </html>

此HTML页面展示了服务器推送的实时数据。

总结

Node.js的非阻塞I/O与SSE技术结合,为构建高效的实时Web应用提供了可能。在应用中,通常需考虑错误处理、断线重连等细节,以确保服务稳定性。

zip 文件大小:1.52KB