1. 为什么是SSE?聊聊我踩过的坑
你可能和我一样,最开始想给Vue3和SpringBoot项目加个类似ChatGPT那种“打字机”效果,第一反应就是去找WebSocket的方案。我当时也是这么干的,吭哧吭哧搞了好几天,配置各种@ServerEndpoint、WebSocketConfig,还得在服务端维护一个连接Session的Map来管理用户状态。功能是做出来了,但心里总觉得不踏实,尤其是想到项目以后可能要上集群做分布式部署,这个Session管理立马就成了一个定时炸弹。怎么同步?用Redis?那又引入了新的复杂度和维护成本。直到我重新审视了需求,才发现自己走了一条“杀鸡用牛刀”的弯路。
我们想要的,其实是一个服务器向浏览器单向、持续推送数据的场景。用户提问,AI模型一个字一个字地流式吐回来,在页面上实时显示。这个过程中,浏览器除了发起最初的请求,并不需要频繁地向服务器发送数据。这时候,SSE(Server-Sent Events,服务器发送事件) 简直就是为我们量身定做的技术。它基于普通的HTTP协议,本质上就是一个长连接,服务器可以沿着这个连接,源源不断地向客户端发送数据流。对前端来说,它使用一个叫EventSource的标准API来接收,用法简单到令人发指。对后端SpringBoot来说,它就是一个返回SseEmitter类型(或其他流式响应体)的普通Controller接口,完全不需要像WebSocket那样搞一堆额外的配置和状态管理。
简单来说,选SSE的核心理由就三个:简单、轻量、天然适合HTTP生态。它不用像WebSocket那样升级协议,没有复杂的握手和心跳维护,在SpringBoot里写起来跟普通接口几乎没区别。在分布式环境下,由于它无状态(每个请求独立),部署和扩展起来也特别省心。下面这张表可以帮你快速理清关键区别:
| 特性 | SSE (Server-Sent Events) | WebSocket |
|---|---|---|
| 通信方向 | 单向 (服务器 -> 客户端) | 双向 (全双工) |
| 协议基础 | HTTP (长连接) | 独立的 WS/WSS 协议 |
| 后端复杂度 | 极低,类似普通接口 | 较高,需配置、管理会话 |
| 前端API | EventSource (原生支持) |
WebSocket 对象 |
| 自动重连 | 原生支持 | 需手动实现 |
| 适用场景 | 实时通知、状态更新、流式文本/数据推送 | 聊天室、协同编辑、实时游戏等需要高频双向交互的场景 |
所以,如果你的场景是像股票行情、新闻推送、监控日志,或者就是我们今天要做的AI对话流式输出,SSE往往是更优雅、更高效的选择。接下来,我就手把手带你用Vue3和SpringBoot,把这套高效又稳定的流式交互界面搭起来。
2. 环境与工具准备:5分钟快速上手
工欲善其事,必先利其器。为了完整模拟ChatGPT的交互流程,我们需要一个能提供流式响应的大语言模型(LLM)API作为后端的数据源。这里我强烈推荐一个对开发者非常友好的工具:LM Studio。它让我们能在自己的电脑(Windows/macOS都支持)上,零代码、可视化地运行各种开源大模型,并暴露出一个标准的OpenAI兼容API,我们的SpringBoot服务直接调用它就行,省去了自己部署模型的巨大麻烦。
第一步,安装并启动模型服务。
- 去LM Studio官网下载安装包,安装过程就像装普通软件一样简单。
- 打开LM Studio,在它的“探索”页面,你可以找到很多开源模型。我们这里选择Qwen 1.5系列(比如
Qwen2.5-7B-Instruct),这是阿里通义千问的开源版本,效果不错,对中文支持也很好。点击下载,等待模型文件下载完成(文件大概几个G,取决于模型大小,请确保磁盘空间充足)。 - 下载完成后,切换到“聊天”标签页。在页面右侧,选择你刚下载的模型,然后点击左下角的“启动服务器”按钮。你会看到服务器成功启动,并监听在
http://localhost:1234这个地址。最关键的是,它提供了一个和OpenAI官方接口完全兼容的API端点(比如/v1/chat/completions),这为我们后续的集成扫清了所有障碍。
第二步,准备前后端项目骨架。 后端我们使用SpringBoot 3.x,构建工具用Maven或


1813

被折叠的 条评论
为什么被折叠?



