- 这是一种双向的。长时间保持的连接,非常适合这个实时交互的场景
- 调用 DeepSeek,我们调用的是流式响应的 API。这一步是实现打字机效果的关键:我们用 Spring WebFlux 的 WebClient 作为 HTTP 客户端,在请求 LLM 的时候也以流式的方式订阅返回的数据流。也就是说,LLM 一边生成内容,一边把内容分成一小段一小段地推给我们,我们这边就一边接收一边处理。
- HTTP 是一种无状态、单向的请求-响应协议,它的工作机制决定了只能由客户端发起请求,服务端只是被动响应
- WebSocket 是一种有状态、全双工的协议,一旦连接建立,前后端就可以随时互相发送消息
- 用户可能在使用过程中遇到网络波动或者临时断网的情况,我们在前端增加了重连机制,在后端增加了会话恢复能力。
- 前端这边,我们使用了 @vueuse 库来管理 WebSocket 连接,它内置了强大的心跳重连机制,一旦连接意外断开,它就会自动尝试重连。而且这个重连不是死磕式的,也就是说每次失败后等待时间都会变长,避免高频的重试对服务器造成压力
- 当用户登录后,前端会获取到一个 JWT,这个 Token 是用户的唯一身份凭证。在用户发起聊天请求时,前端会将这个 Token 附加到 WebSocket 的连接请求中
posted @
2025-12-11 14:59
Huangyien
阅读(
3)
评论()
收藏
举报