joken-前端工程师

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
  404 随笔 :: 39 文章 :: 8 评论 :: 20万 阅读

Server-Sent Events (SSE) 是一种允许服务器向客户端推送更新的技术。它使用 HTTP 协议,通过一个持久的 HTTP 连接,服务器可以在任何时间发送新的事件到客户端。SSE 通常用于实时更新,如股票价格、新闻更新等。

以下是一个简单的 SSE 使用示例:

服务器端 (Node.js + Express)

const express = require('express');
const app = express();

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

  // 模拟实时数据更新
  setInterval(() => {
    res.write(`data: ${new Date().toISOString()}\n\n`);
  }, 1000);
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

客户端 (HTML + JavaScript)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>SSE Example</title>
</head>
<body>
  <h1>Server-Sent Events Example</h1>
  <div id="messages"></div>

  <script>
    // 创建一个新的 EventSource 实例
    const eventSource = new EventSource('/events');

    // 监听 message 事件
    eventSource.onmessage = function(event) {
      const message = document.createElement('p');
      message.textContent = `Message from server: ${event.data}`;
      document.getElementById('messages').appendChild(message);
    };

    // 监听 open 事件
    eventSource.onopen = function() {
      console.log('Connection to server opened.');
    };

    // 监听 error 事件
    eventSource.onerror = function(error) {
      console.error('Error:', error);
    };
  </script>
</body>
</html>

解释

  • 服务器端:创建一个 Express 服务器,监听 /events 路由。当客户端连接到这个路由时,服务器会设置响应头以启用 SSE,并通过 setInterval 每秒发送一个新的事件(当前时间)。
  • 客户端:创建一个 EventSource 实例连接到服务器的 /events 路由。通过监听 message 事件,客户端可以接收到服务器发送的更新,并将这些更新显示在页面上。

注意事项

  • SSE 使用 HTTP 协议,因此它不支持跨域请求,除非服务器配置了 CORS。
  • SSE 连接是持久的,直到客户端或服务器关闭连接。
  • SSE 不支持双向通信,如果需要双向通信,可以考虑使用 WebSocket。

通过这些示例,你可以看到如何使用 SSE 在服务器和客户端之间建立持久连接,并实时推送数据。

posted on   joken1310  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示