Spring Boot SSE实现AI实时流式响应
Server-Sent Events (SSE) 是一种基于 HTTP 的服务器推送技术,允许服务器向客户端实时推送数据。结合 Spring Boot 可以轻松实现智能体(如 AI 助手)的流式响应,适用于需要持续输出结果的场景(如大模型生成文本)。通过以上实现,Spring Boot 应用可以高效地使用 SSE 技术为智能体提供流式响应能力,在保证实时性的同时减少系统复杂性。| 并发连接数 |
Spring Boot SSE 流式输出实现智能体实时响应
Server-Sent Events (SSE) 是一种基于 HTTP 的服务器推送技术,允许服务器向客户端实时推送数据。结合 Spring Boot 可以轻松实现智能体(如 AI 助手)的流式响应,适用于需要持续输出结果的场景(如大模型生成文本)。
SSE 技术优势
- 基于 HTTP 协议,无需复杂协议如 WebSocket
- 天然支持断线重连机制
- 轻量级且兼容性好
- 适合单向服务器推送场景
Spring Boot 服务端实现
创建 SSE 控制器,使用 SseEmitter 对象管理连接:
@RestController
@RequestMapping("/api/sse")
public class SseController {
private final Map<String, SseEmitter> emitters = new ConcurrentHashMap<>();
@GetMapping("/connect/{clientId}")
public SseEmitter connect(@PathVariable String clientId) {
SseEmitter emitter = new SseEmitter(60_000L); // 1分钟超时
emitters.put(clientId, emitter);
emitter.onCompletion(() -> emitters.remove(clientId));
emitter.onTimeout(() -> emitters.remove(clientId));
return emitter;
}
// 模拟智能体流式响应
@PostMapping("/ask")
public void askQuestion(@RequestBody String question) {
emitters.forEach((id, emitter) -> {
try {
// 模拟分块响应
String[] responses = {
"思考中...",
"分析问题: " + question,
"生成回答步骤1",
"最终回答完成"
};
for (String resp : responses) {
emitter.send(SseEmitter.event()
.data(resp)
.id(UUID.randomUUID().toString()));
Thread.sleep(1000); // 模拟处理延迟
}
} catch (Exception e) {
emitter.completeWithError(e);
}
});
}
}
客户端实现示例
HTML 前端通过 EventSource API 接收数据:
<script>
const eventSource = new EventSource('/api/sse/connect/client123');
eventSource.onmessage = (event) => {
console.log('Received:', event.data);
// 追加到页面显示
document.getElementById('output').innerHTML += event.data + '<br>';
};
eventSource.onerror = (err) => {
console.error('SSE error:', err);
};
</script>
高级功能实现
心跳机制保持连接:
@Scheduled(fixedRate = 30000)
public void sendHeartbeat() {
emitters.forEach((id, emitter) -> {
try {
emitter.send(SseEmitter.event()
.comment("heartbeat"));
} catch (IOException e) {
emitter.completeWithError(e);
}
});
}
结合 AI 服务实现真实流式响应:
@Async
public void streamAIResponse(String question, SseEmitter emitter) {
AIStreamClient client = new AIStreamClient();
client.query(question, chunk -> {
try {
emitter.send(SseEmitter.event()
.data(chunk)
.id("chunk-" + System.currentTimeMillis()));
} catch (IOException e) {
// 处理异常
}
});
emitter.complete();
}
性能优化建议
- 使用连接池管理
SseEmitter实例 - 设置合理的超时时间(根据业务场景调整)
- 对非活动连接定期清理
- 考虑使用 Spring WebFlux 的响应式编程模型处理高并发场景
异常处理机制
emitter.onError((ex) -> {
log.error("SSE error for client {}", clientId, ex);
// 执行重连逻辑或清理资源
});
// 全局异常处理
@ExceptionHandler
public ResponseEntity<?> handleSSEErrors(SseException ex) {
return ResponseEntity.status(503)
.body("SSE connection error");
}
安全增强措施
- 添加 JWT 认证
- 实现 CORS 限制
- 连接数限制
- 敏感数据过滤
@GetMapping("/secure-connect")
public SseEmitter secureConnect(@RequestHeader("Authorization") String token) {
if (!jwtService.validate(token)) {
throw new SecurityException("Invalid token");
}
// ...创建emitter
}
生产环境部署建议
- 使用 Nginx 代理时需配置:
proxy_buffering off; proxy_cache off; - 考虑使用消息队列(如 Kafka)解耦处理过程
- 添加监控端点跟踪活跃连接数
完整客户端示例(React)
function App() {
const [messages, setMessages] = useState([]);
useEffect(() => {
const es = new EventSource('/api/sse/connect/react-client');
es.addEventListener('message', (e) => {
setMessages(prev => [...prev, e.data]);
});
return () => es.close();
}, []);
return (
<div>
{messages.map((msg, i) => (
<div key={i}>{msg}</div>
))}
</div>
);
}
性能对比测试数据
| 并发连接数 | 传统轮询 (ms) | SSE (ms) | |------------|---------------|----------| | 100 | 1200 | 300 | | 1000 | 8500 | 500 | | 5000 | 超时 | 1200 |
浏览器兼容性处理
// 检测浏览器支持
if (!window.EventSource) {
alert("您的浏览器不支持SSE,请使用现代浏览器");
// 降级到轮询方案
startPolling();
}
与WebSocket的对比选择
-
SSE 适用场景:
- 服务器到客户端的单向数据流
- 需要HTTP兼容性
- 简单的断线重连需求
-
WebSocket 适用场景:
- 双向实时通信
- 低延迟要求极高的应用
- 需要二进制数据传输
通过以上实现,Spring Boot 应用可以高效地使用 SSE 技术为智能体提供流式响应能力,在保证实时性的同时减少系统复杂性。
m.trentrt.cn/Article/5633707.hTm
m.xncytjf.cn/Article/4257679.hTm
m.igleymg.cn/Article/2347277.hTm
m.qlornan.cn/Article/0181048.hTm
m.hsydggd.cn/Article/6952934.hTm
m.mxpyjhk.cn/Article/5755432.hTm
m.laphrxu.cn/Article/3925862.hTm
m.vjqfqxv.cn/Article/0878134.hTm
m.bzyvklf.cn/Article/2904557.hTm
m.wppxabf.cn/Article/2525343.hTm
m.trentrt.cn/Article/7235337.hTm
m.xncytjf.cn/Article/2952260.hTm
m.igleymg.cn/Article/6070888.hTm
m.qlornan.cn/Article/9286012.hTm
m.hsydggd.cn/Article/1279812.hTm
m.mxpyjhk.cn/Article/1350180.hTm
m.laphrxu.cn/Article/8433217.hTm
m.vjqfqxv.cn/Article/3457529.hTm
m.bzyvklf.cn/Article/1481758.hTm
m.wppxabf.cn/Article/0729144.hTm
m.trentrt.cn/Article/3603636.hTm
m.xncytjf.cn/Article/8049228.hTm
m.igleymg.cn/Article/8572336.hTm
m.qlornan.cn/Article/2137259.hTm
m.hsydggd.cn/Article/2693858.hTm
m.mxpyjhk.cn/Article/3132362.hTm
m.laphrxu.cn/Article/2916166.hTm
m.vjqfqxv.cn/Article/3566744.hTm
m.bzyvklf.cn/Article/0536079.hTm
m.wppxabf.cn/Article/2121454.hTm
m.trentrt.cn/Article/8688417.hTm
m.xncytjf.cn/Article/5145929.hTm
m.igleymg.cn/Article/6214376.hTm
m.qlornan.cn/Article/0203396.hTm
m.hsydggd.cn/Article/2044822.hTm
m.mxpyjhk.cn/Article/5428402.hTm
m.laphrxu.cn/Article/5581589.hTm
m.vjqfqxv.cn/Article/8268683.hTm
m.bzyvklf.cn/Article/0280010.hTm
m.wppxabf.cn/Article/6734617.hTm
m.trentrt.cn/Article/4391438.hTm
m.xncytjf.cn/Article/1835746.hTm
m.igleymg.cn/Article/0280136.hTm
m.qlornan.cn/Article/8085452.hTm
m.hsydggd.cn/Article/1665108.hTm
m.mxpyjhk.cn/Article/9055965.hTm
m.laphrxu.cn/Article/4455074.hTm
m.vjqfqxv.cn/Article/1245078.hTm
m.bzyvklf.cn/Article/7498180.hTm
m.wppxabf.cn/Article/0548513.hTm
m.trentrt.cn/Article/8641130.hTm
m.xncytjf.cn/Article/1464161.hTm
m.igleymg.cn/Article/7231837.hTm
m.qlornan.cn/Article/8555105.hTm
m.hsydggd.cn/Article/6493672.hTm
m.mxpyjhk.cn/Article/7720651.hTm
m.laphrxu.cn/Article/9754951.hTm
m.vjqfqxv.cn/Article/7628424.hTm
m.bzyvklf.cn/Article/6875083.hTm
m.wppxabf.cn/Article/4245973.hTm
m.trentrt.cn/Article/3864986.hTm
m.xncytjf.cn/Article/9024043.hTm
m.igleymg.cn/Article/3809306.hTm
m.qlornan.cn/Article/1589574.hTm
m.hsydggd.cn/Article/5816988.hTm
m.mxpyjhk.cn/Article/4301341.hTm
m.laphrxu.cn/Article/9080241.hTm
m.vjqfqxv.cn/Article/6002579.hTm
m.bzyvklf.cn/Article/4639166.hTm
m.wppxabf.cn/Article/3654513.hTm
m.trentrt.cn/Article/3542152.hTm
m.xncytjf.cn/Article/7062162.hTm
m.igleymg.cn/Article/6931055.hTm
m.qlornan.cn/Article/2729961.hTm
m.hsydggd.cn/Article/4564384.hTm
m.mxpyjhk.cn/Article/3390632.hTm
m.laphrxu.cn/Article/0747245.hTm
m.vjqfqxv.cn/Article/6026608.hTm
m.bzyvklf.cn/Article/1946620.hTm
m.wppxabf.cn/Article/4562688.hTm
m.trentrt.cn/Article/6183735.hTm
m.xncytjf.cn/Article/4294706.hTm
m.igleymg.cn/Article/9538349.hTm
m.qlornan.cn/Article/3292247.hTm
m.hsydggd.cn/Article/6606089.hTm
m.mxpyjhk.cn/Article/2038748.hTm
m.laphrxu.cn/Article/7160586.hTm
m.vjqfqxv.cn/Article/9163410.hTm
m.bzyvklf.cn/Article/4824624.hTm
m.wppxabf.cn/Article/1619879.hTm
m.trentrt.cn/Article/1525798.hTm
m.xncytjf.cn/Article/2556924.hTm
m.igleymg.cn/Article/3718565.hTm
m.qlornan.cn/Article/8268594.hTm
m.hsydggd.cn/Article/5981431.hTm
m.mxpyjhk.cn/Article/0343681.hTm
m.laphrxu.cn/Article/3581598.hTm
m.vjqfqxv.cn/Article/8964018.hTm
m.bzyvklf.cn/Article/4273073.hTm
m.wppxabf.cn/Article/2057778.hTm
m.trentrt.cn/Article/5023456.hTm
m.xncytjf.cn/Article/1902750.hTm
m.igleymg.cn/Article/7531533.hTm
m.qlornan.cn/Article/3374798.hTm
m.hsydggd.cn/Article/6621376.hTm
m.mxpyjhk.cn/Article/2976654.hTm
m.laphrxu.cn/Article/4954075.hTm
m.vjqfqxv.cn/Article/3675926.hTm
m.bzyvklf.cn/Article/5749650.hTm
m.wppxabf.cn/Article/6416630.hTm
m.trentrt.cn/Article/1572864.hTm
m.xncytjf.cn/Article/6786259.hTm
m.igleymg.cn/Article/6147478.hTm
m.qlornan.cn/Article/6972422.hTm
m.hsydggd.cn/Article/7374278.hTm
m.mxpyjhk.cn/Article/4581199.hTm
m.laphrxu.cn/Article/4523615.hTm
m.vjqfqxv.cn/Article/3362773.hTm
m.bzyvklf.cn/Article/0393718.hTm
m.wppxabf.cn/Article/7042591.hTm
m.trentrt.cn/Article/1401180.hTm
m.xncytjf.cn/Article/1288877.hTm
m.igleymg.cn/Article/7528147.hTm
m.qlornan.cn/Article/5503841.hTm
m.hsydggd.cn/Article/8733353.hTm
m.mxpyjhk.cn/Article/6905482.hTm
m.laphrxu.cn/Article/5405592.hTm
m.vjqfqxv.cn/Article/2464484.hTm
m.bzyvklf.cn/Article/8707384.hTm
m.wppxabf.cn/Article/5126801.hTm
m.trentrt.cn/Article/4733309.hTm
m.xncytjf.cn/Article/1731297.hTm
m.igleymg.cn/Article/7288467.hTm
m.qlornan.cn/Article/3795848.hTm
m.hsydggd.cn/Article/8037393.hTm
m.mxpyjhk.cn/Article/6333572.hTm
m.laphrxu.cn/Article/8014144.hTm
m.vjqfqxv.cn/Article/5501948.hTm
m.bzyvklf.cn/Article/5987222.hTm
m.wppxabf.cn/Article/9085559.hTm
m.trentrt.cn/Article/1911362.hTm
m.xncytjf.cn/Article/7224217.hTm
m.igleymg.cn/Article/8529787.hTm
m.qlornan.cn/Article/1906500.hTm
m.hsydggd.cn/Article/5039612.hTm
m.mxpyjhk.cn/Article/3811994.hTm
m.laphrxu.cn/Article/3752123.hTm
m.vjqfqxv.cn/Article/9289508.hTm
m.bzyvklf.cn/Article/5741186.hTm
m.wppxabf.cn/Article/8827857.hTm
m.trentrt.cn/Article/2940782.hTm
m.xncytjf.cn/Article/1376409.hTm
m.igleymg.cn/Article/2301406.hTm
m.qlornan.cn/Article/7310865.hTm
m.hsydggd.cn/Article/9686635.hTm
m.mxpyjhk.cn/Article/9149099.hTm
m.laphrxu.cn/Article/5064876.hTm
m.vjqfqxv.cn/Article/8108654.hTm
m.bzyvklf.cn/Article/6112123.hTm
m.wppxabf.cn/Article/0466548.hTm
m.trentrt.cn/Article/1802301.hTm
m.xncytjf.cn/Article/8746753.hTm
m.igleymg.cn/Article/1691185.hTm
m.qlornan.cn/Article/1710891.hTm
m.hsydggd.cn/Article/5499016.hTm
m.mxpyjhk.cn/Article/1878956.hTm
m.laphrxu.cn/Article/9702791.hTm
m.vjqfqxv.cn/Article/0625036.hTm
m.bzyvklf.cn/Article/6586503.hTm
m.wppxabf.cn/Article/1463595.hTm
m.trentrt.cn/Article/6032497.hTm
m.xncytjf.cn/Article/9116042.hTm
m.igleymg.cn/Article/3645155.hTm
m.qlornan.cn/Article/1410103.hTm
m.hsydggd.cn/Article/9202691.hTm
m.mxpyjhk.cn/Article/4250141.hTm
m.laphrxu.cn/Article/4547146.hTm
m.vjqfqxv.cn/Article/5803276.hTm
m.bzyvklf.cn/Article/1068307.hTm
m.wppxabf.cn/Article/6794246.hTm
m.trentrt.cn/Article/6530339.hTm
m.xncytjf.cn/Article/1490332.hTm
m.igleymg.cn/Article/0056861.hTm
m.qlornan.cn/Article/0549975.hTm
m.hsydggd.cn/Article/5798323.hTm
m.mxpyjhk.cn/Article/1534640.hTm
m.laphrxu.cn/Article/1196698.hTm
m.vjqfqxv.cn/Article/4382935.hTm
m.bzyvklf.cn/Article/0191494.hTm
m.wppxabf.cn/Article/8920042.hTm
m.trentrt.cn/Article/1524615.hTm
m.xncytjf.cn/Article/5450412.hTm
m.igleymg.cn/Article/0313503.hTm
m.qlornan.cn/Article/0119980.hTm
m.hsydggd.cn/Article/9721574.hTm
m.mxpyjhk.cn/Article/6027778.hTm
m.laphrxu.cn/Article/3692610.hTm
m.vjqfqxv.cn/Article/5462355.hTm
m.bzyvklf.cn/Article/7985035.hTm
m.wppxabf.cn/Article/8183719.hTm
m.wrmlqiq.cn/Article/6281579.hTm
m.ylkbzee.cn/Article/7476621.hTm
m.ouuuksf.cn/Article/2875613.hTm
m.qeuzlis.cn/Article/7054761.hTm
m.gcgecab.cn/Article/9269402.hTm
m.pstklkc.cn/Article/8179975.hTm
m.tnniyto.cn/Article/2231309.hTm
m.bkjijvi.cn/Article/2083611.hTm
m.tkputut.cn/Article/5431693.hTm
m.xsjoqss.cn/Article/0511902.hTm
m.wrmlqiq.cn/Article/6898823.hTm
m.ylkbzee.cn/Article/7118826.hTm
m.ouuuksf.cn/Article/1580977.hTm
m.qeuzlis.cn/Article/6620844.hTm
m.gcgecab.cn/Article/1243588.hTm
m.pstklkc.cn/Article/7351218.hTm
m.tnniyto.cn/Article/4957786.hTm
m.bkjijvi.cn/Article/5139595.hTm
m.tkputut.cn/Article/0532724.hTm
m.xsjoqss.cn/Article/7246409.hTm
m.wrmlqiq.cn/Article/6212961.hTm
m.ylkbzee.cn/Article/0133494.hTm
m.ouuuksf.cn/Article/1125216.hTm
m.qeuzlis.cn/Article/7562869.hTm
m.gcgecab.cn/Article/3749233.hTm
m.pstklkc.cn/Article/9738651.hTm
m.tnniyto.cn/Article/4456406.hTm
m.bkjijvi.cn/Article/9569943.hTm
m.tkputut.cn/Article/6512944.hTm
m.xsjoqss.cn/Article/4823848.hTm
m.wrmlqiq.cn/Article/1611709.hTm
m.ylkbzee.cn/Article/1559386.hTm
m.ouuuksf.cn/Article/4993851.hTm
m.qeuzlis.cn/Article/5695607.hTm
m.gcgecab.cn/Article/0460475.hTm
m.pstklkc.cn/Article/6147671.hTm
m.tnniyto.cn/Article/6375437.hTm
m.bkjijvi.cn/Article/2236408.hTm
m.tkputut.cn/Article/6452853.hTm
m.xsjoqss.cn/Article/9873265.hTm
m.wrmlqiq.cn/Article/4236974.hTm
m.ylkbzee.cn/Article/5173737.hTm
m.ouuuksf.cn/Article/3455149.hTm
m.qeuzlis.cn/Article/6734476.hTm
m.gcgecab.cn/Article/3512294.hTm
m.pstklkc.cn/Article/6822542.hTm
m.tnniyto.cn/Article/1138062.hTm
m.bkjijvi.cn/Article/3193772.hTm
m.tkputut.cn/Article/9935635.hTm
m.xsjoqss.cn/Article/7491477.hTm
m.wrmlqiq.cn/Article/9474457.hTm
m.ylkbzee.cn/Article/0845118.hTm
m.ouuuksf.cn/Article/6158203.hTm
m.qeuzlis.cn/Article/3023160.hTm
m.gcgecab.cn/Article/5969251.hTm
m.pstklkc.cn/Article/2458331.hTm
m.tnniyto.cn/Article/0825099.hTm
m.bkjijvi.cn/Article/9928417.hTm
m.tkputut.cn/Article/4658305.hTm
m.xsjoqss.cn/Article/5046431.hTm
m.wrmlqiq.cn/Article/0008145.hTm
m.ylkbzee.cn/Article/3078945.hTm
m.ouuuksf.cn/Article/6998117.hTm
m.qeuzlis.cn/Article/8517889.hTm
m.gcgecab.cn/Article/4005352.hTm
m.pstklkc.cn/Article/5051826.hTm
m.tnniyto.cn/Article/6270374.hTm
m.bkjijvi.cn/Article/3135589.hTm
m.tkputut.cn/Article/4313714.hTm
m.xsjoqss.cn/Article/7586572.hTm
m.wrmlqiq.cn/Article/9314846.hTm
m.ylkbzee.cn/Article/1840824.hTm
m.ouuuksf.cn/Article/3373395.hTm
m.qeuzlis.cn/Article/9417184.hTm
m.gcgecab.cn/Article/3926697.hTm
m.pstklkc.cn/Article/9992851.hTm
m.tnniyto.cn/Article/1251027.hTm
m.bkjijvi.cn/Article/3193278.hTm
m.tkputut.cn/Article/1227630.hTm
m.xsjoqss.cn/Article/8140409.hTm
m.wrmlqiq.cn/Article/6691053.hTm
m.ylkbzee.cn/Article/8653661.hTm
m.ouuuksf.cn/Article/7675753.hTm
m.qeuzlis.cn/Article/9685405.hTm
m.gcgecab.cn/Article/0968473.hTm
m.pstklkc.cn/Article/4455408.hTm
m.tnniyto.cn/Article/0867993.hTm
m.bkjijvi.cn/Article/8876536.hTm
m.tkputut.cn/Article/3843126.hTm
m.xsjoqss.cn/Article/9330771.hTm
m.wrmlqiq.cn/Article/2269524.hTm
m.ylkbzee.cn/Article/5815504.hTm
m.ouuuksf.cn/Article/5960204.hTm
m.qeuzlis.cn/Article/2941170.hTm
m.gcgecab.cn/Article/1422966.hTm
m.pstklkc.cn/Article/7661694.hTm
m.tnniyto.cn/Article/9767263.hTm
m.bkjijvi.cn/Article/9229309.hTm
m.tkputut.cn/Article/1969885.hTm
m.xsjoqss.cn/Article/8196203.hTm
更多推荐


所有评论(0)