前端js+vue承接后端SSE流式输出结果

前置

解释:
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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值