前置

解释:
Server-Sent Events:服务器发送事件,是一种基于 HTTP 的轻量级协议,允许服务器主动向客户端推送文本数据(如 JSON、纯文本等)
特点:

  • 单向通信:仅服务器 → 客户端方向
  • 基于 HTTP/HTTPS:无需特殊协议
  • 自动重连:浏览器内置支持断线重连
  • 简单易用:前端直接使用 EventSource API

注意:

  • 前端 SSE 格式解析:会自动忽略 data: 前缀和 \n\n 分隔符
  • 服务器返回 5xx 错误会触发 error 事件
  • 网络中断会自动重连(默认 3 秒重试)

流程:

前端 (Vue)       → 发起SSE请求 →   Spring Boot (Controller)
  ↓                                   ↓
(EventSource)    ← 流式数据 ←   WebClient → 大模型API (流式HTTP)

前端 js 代码

<template>
  <div>
    <button @click="startStream">开始接收流</button>
    <button @click="closeStream">停止</button>
    <div>{{ streamData }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      streamData: "",
      eventSource: null
    };
  },
  methods: {
    startStream() {
      // 1. 创建EventSource连接
      this.eventSource = new EventSource("http://your-spring-api/sse-stream");

      // 2. 监听消息事件
      this.eventSource.addEventListener("message", (event) => {
        // 实际数据在 event.data 中
        this.streamData += event.data; // 追加到页面
      });

      // 3. 监听错误事件
      this.eventSource.addEventListener("error", (err) => {
        console.error("SSE error:", err);
        this.closeStream(); // 出错时关闭连接
      });
    },
    closeStream() {
      if (this.eventSource) {
        this.eventSource.close(); // 主动关闭连接
        this.eventSource = null;
      }
    }
  },
  beforeDestroy() {
    this.closeStream(); // 组件销毁时清理
  }
};
</script>

扩展

自定义事件类型:

后端发送:event: update\ndata: {…}\n\n

前端监听:.addEventListener(“update”, handler)

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐