如何配置 SSE(Server-Sent Events)协议

服务端单向推送的轻量选择,简单、稳定、浏览器原生支持。

SSE 的基本原理

SSE 是基于 HTTP 的单向数据流推送:客户端发起一次连接后,服务器保持连接不断发送数据。浏览器端用 EventSource 接口接收消息。

后端返回示例(Node.js/Express)

app.get('/stream', (req, res) => {
  res.setHeader('Content-Type', 'text/event-stream');
  res.setHeader('Cache-Control', 'no-cache');
  res.setHeader('Connection', 'keep-alive');

  const send = (event, data) => {
    res.write(`event: ${event}\n`);
    res.write(`data: ${JSON.stringify(data)}\n\n`);
  };

  // 定时推送
  const timer = setInterval(() => {
    send('message', { time: Date.now() });
  }, 2000);

  // 客户端断开时清理
  req.on('close', () => {
    clearInterval(timer);
    res.end();
  });
});

前端接收示例

const es = new EventSource('/stream');

es.addEventListener('message', (e) => {
  console.log('消息:', JSON.parse(e.data));
});

es.addEventListener('error', (e) => {
  console.error('SSE 错误', e);
});

Nginx / 反向代理配置注意点

# 例:Nginx 反向代理 SSE
location /stream {
  proxy_pass http://127.0.0.1:3000;
  proxy_http_version 1.1;
  proxy_set_header Connection "";
  proxy_buffering off;       # 禁用缓冲
  proxy_cache off;
  proxy_read_timeout 1h;     # 适当延长超时
}

部署与常见问题

← 返回首页