最近在处理项目中,处理关于大模型流式接口的对接,并将处理后的数据,按照流式方式发送给前端。在了解实现方案中,发现基于 OkHttp Sse + Spring SseEmitter 的技术方案。OkHttp Sse 实现对大模型输出的流式结果进行监控处理,并通过 Spring SseEmitter 将处理后的结果输出到前端。
Spring SseEmitter
服务端主动推送:SSE (Server Send Event)。html5新标准,用来从服务端实时推送数据到浏览器端,直接建立在当前http连接上,本质上是保持一个http长连接,轻量协议简单的服务器数据推送的场景,使用服务器推送事件, SSE技术是基于单工通信模式,只是单纯的客户端向服务端发送请求,服务端不会主动发送给客户端。服务端采取的策略是抓住这个请求不放,等数据更新的时候才返回给客户端,当客户端接收到消息后,再向服务端发送请求,周而复始。
SseEmitter 是SpringMVC(4.2+)提供的一种技术,它是基于Http协议的,相比WebSocket,它更轻量,但是它只能从服务端向客户端单向发送信息。
案例
代码实现:
1 | /** |
与 WebSocket 比较
Spring SseEmitter 和 WebSocket 都实现了服务端向客户端推送数据,不过 WebSocket 是 全双工通信,客户端和服务端可以互相通信。而 SseEmitter 只能从服务端向 客户端推送(该功能以及包含在 spring boot jar 中)。