当前位置: 首页 > web >正文

67.实现AI流式回答的后端实现(2)

实现AI流式回答中断功能的后端实现(下)

前端交互设计

要实现流畅的中断体验,前后端需要紧密配合。前端需要:

  1. 在发送流式请求时获取唯一的emitter ID
  2. 提供中断按钮并绑定中断API调用
  3. 优雅处理中断后的UI状态

后端相应需要扩展:

// 扩展的流式端点,返回emitter ID
@PostMapping("/stream")
public Map<String, Object> streamResponse(...) {String emitterId = UUID.randomUUID().toString();SseEmitterWrapper wrapper = new SseEmitterWrapper(emitter);emitterRegistry.put(emitterId, wrapper);// ...原有逻辑...return Map.of("emitterId", emitterId,"emitter", wrapper.getEmitter());
}

注册表实现

完整的Emitter注册表实现:

@Component
public class EmitterRegistry {private final ConcurrentMap<String, SseEmitterWrapper> emitters = new ConcurrentHashMap<>();private final ScheduledExecutorService cleaner = Executors.newSingleThreadScheduledExecutor();public EmitterRegistry() {// 每小时清理一次已完成的emittercleaner.scheduleAtFixedRate(this::cleanUp, 1, 1, TimeUnit.HOURS);}public void put(String id, SseEmitterWrapper wrapper) {emitters.put(id, wrapper);}public SseEmitterWrapper get(String id) {return emitters.get(id);}public void cleanUp() {emitters.entrySet().removeIf(entry -> entry.getValue().isCompleted());}@PreDestroypublic void shutdown() {cleaner.shutdown();}
}

性能优化策略

  1. ​连接管理​​:

// 在WebClient配置中
WebClient.builder().clientConnector(new ReactorClientHttpConnector(HttpClient.create().responseTimeout(Duration.ofSeconds(30)).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)))

    总结:

    通过这两篇文章,我完整实现了:

    1. 基于SSE的流式回答功能
    2. 用户可中断机制
    3. 完善的异常处理和资源管理
    4. 性能优化策略

    关键收获:

    • takeUntil是实现中断的核心操作符
    • 状态管理需要线程安全的设计
    • 完整的生命周期管理至关重要
    • 监控和指标收集对生产环境必不可少
    http://www.xdnf.cn/news/10269.html

    相关文章:

  1. Vue-Router简版手写实现
  2. 2025年5月个人工作生活总结
  3. lstm 长短期记忆 视频截图 kaggle示例
  4. Rock9.x(Linux)安装Redis7
  5. 寒假学习笔记【匠心制作,图文并茂】——1.20拓扑、强连通分量、缩点
  6. CppCon 2014 学习: The Implementation of Value Types
  7. Compose原理 - 整体架构与主流程
  8. JDK21深度解密 Day 8:Spring Boot 3与虚拟线程整合
  9. 【清晰教程】查看和修改Git配置情况
  10. SCSS 全面深度解析
  11. neo4j 5.19.0安装、apoc csv导入导出 及相关问题处理
  12. Windows最快速打开各项系统设置大全
  13. RAID磁盘阵列配置
  14. 鸿蒙编译ffmpeg库
  15. M4Pro安装ELK(ElasticSearch+LogStash+Kibana)踩坑记录
  16. 性能优化 - 理论篇:性能优化的七类技术手段
  17. SMT贴片机工艺优化与效率提升策略
  18. WEB3——为什么做NFT铸造平台?
  19. 配置远程无密登陆ubuntu服务器时无法连接问题排查
  20. 系统是win11+两个ubuntu,ubuntu20.04和ubuntu22.04,想删除ubuntu20.04且不用保留数据
  21. 【图像处理入门】3. 几何变换基础:从平移旋转到插值魔法
  22. day15 leetcode-hot100-29(链表8)
  23. KWIC—Implicit Invocation
  24. Redis实战-基于redis和lua脚本实现分布式锁以及Redission源码解析【万字长文】
  25. 【android bluetooth 案例分析 04】【Carplay 详解 2】【Carplay 连接之手机主动连车机】
  26. 【android bluetooth 案例分析 04】【Carplay 详解 3】【Carplay 连接之车机主动连手机】
  27. K 值选对,准确率翻倍:KNN 算法调参的黄金法则
  28. 当前用户的Git本地配置情况:git config --local --list
  29. Python Day38 学习
  30. 2025山东CCPC题解