大学牲学习记录,佬可滑走。
一、 Spring MVC Request Response
1. HttpServletRequest / HttpServletResponse 从哪来?
-
客户端发起 HTTP 请求, Tomcat 容器自动创建一对原生对象:
HttpServletRequest: 封装请求数据 (请求头、请求体、参数、cookie)HttpServletResponse: 封装响应上下文(响应头、响应流、连接状态)
-
SpringMVC 拦截请求后,自动注入到 Controller 方法入参;
2.Response 在ai项目流式响应的应用
在 AI Agent 流式接口中,手动设置 SSE 协议必备响应头:
response.setContentType("text/event-stream"); // 声明SSE事件流
response.setHeader("Connection", "keep-alive"); // 维持长连接
response.setHeader("Cache-Control", "no-cache"); // 禁止缓存
作用:告诉浏览器,当前不是普通一次性接口,而是长连接流式推送。
二、ResponseBodyEmitter
1.是什么?
SpringMVC 提供的异步流式响应组件,用于打破一次性响应,实现长连接、分段推送给数据。 核心工作原理?
2. 核心工作原理
- Controller 方法直接返回 ResponseBodyEmitter 对象;
- Spring 接收该对象,暂时不关闭 HTTP 连接,挂起响应;
- 业务层 / 异步线程中,通过
emitter.send()分段、实时推送数据; - 全部执行完毕调用
emitter.complete(),正常关闭连接;异常则completeWithError()。
3. 关键特性
-
接口主线程立即释放,不会阻塞 Tomcat 线程;
-
适合大模型流式输出、Agent 多步骤执行、日志实时打印、进度条场景;
-
天然配合 SSE 实现类 ChatGPT 打字机效果。
4. 和普通返回值的区别
-
普通接口:组装完全量数据 → 一次性返回 → 连接关闭;
-
Emitter 流式:先交付管道 → 异步分步推数据 → 手动关闭连接。
SSE流式接口 完整流程
-
请求到达,Tomcat 自动创建 Request/Response,Spring 注入到控制器;
-
通过
HttpServletResponse提前设置 SSE 协议头,声明长连接 + 事件流; -
构建
ResponseBodyEmitter长连接管道,交给 Spring 管理; -
将 emitter 传入调度服务,异步执行 Agent 逻辑;
-
大模型思考、工具调用、知识库检索等每一步,通过
emitter.send()实时推送; -
Agent 执行完成,调用
complete()关闭长连接,流程结束。