bbe8fcd776
- 将前端项目目录从 web-flowith 重命名为 web,使目录结构更简洁 - 保持所有前端代码和配置文件不变 - 统一项目目录命名规范
5.8 KiB
5.8 KiB
WebSocket集成总结
概述
已成功将web-flowith前端的对话页面从HTTP API调用改为WebSocket实时通信方式,实现了与后端emotion-websocket服务的完整集成。
完成的工作
1. 依赖管理
- ✅ 添加了WebSocket相关依赖
sockjs-client: SockJS客户端库stompjs: STOMP协议支持@types/sockjs-client: TypeScript类型定义@types/stompjs: TypeScript类型定义
2. WebSocket服务类 (src/services/websocket.ts)
- ✅ 创建了完整的WebSocket服务类
- ✅ 支持连接管理和状态跟踪
- ✅ 实现了自动重连机制
- ✅ 支持心跳检测
- ✅ 完整的错误处理
- ✅ 支持用户和游客两种模式
主要功能:
class WebSocketService {
connect(userId?: string, callbacks?: WebSocketCallbacks): Promise<void>
disconnect(): void
sendChatMessage(content: string, conversationId?: string): void
setConversationId(conversationId: string): void
getStatus(): ConnectionStatus
isConnected(): boolean
}
3. 聊天Store更新 (src/stores/chat.ts)
- ✅ 集成WebSocket服务
- ✅ 添加连接状态管理
- ✅ 实现WebSocket消息处理
- ✅ 支持自动重连
- ✅ 优化用户体验
新增状态:
wsConnected: WebSocket连接状态connectionStatus: 详细连接状态connectWebSocket(): 连接方法disconnectWebSocket(): 断开连接方法handleWebSocketMessage(): 消息处理方法
4. 聊天页面更新 (src/views/Chat/index.vue)
- ✅ 添加连接状态显示
- ✅ 实时连接状态指示器
- ✅ 连接断开时的用户提示
- ✅ 禁用离线时的输入功能
- ✅ 手动重连功能
- ✅ 优化的用户界面
新增功能:
- 连接状态指示灯(绿色=在线,黄色=连接中,红色=离线)
- 连接状态提示条
- 智能输入框占位符
- 自动重连提示
5. 环境配置更新
- ✅ 更新了
.env配置文件 - ✅ 创建了
.env.development开发环境配置 - ✅ 更新了
.env.production生产环境配置 - ✅ 配置了WebSocket URL通过网关访问
配置说明:
# 开发环境
VITE_WS_URL=http://localhost:19000/ws/chat
# 生产环境
VITE_WS_URL=http://47.111.10.27:19000/ws/chat
6. 测试页面 (src/views/WebSocketTest.vue)
- ✅ 创建了专门的WebSocket测试页面
- ✅ 实时连接状态监控
- ✅ 消息发送测试
- ✅ 消息历史记录
- ✅ 配置信息显示
技术特性
1. 连接管理
- 自动重连: 连接断开时自动尝试重连,最多5次
- 心跳检测: 每30秒发送心跳包保持连接
- 状态跟踪: 实时跟踪连接状态变化
- 错误处理: 完善的错误处理和用户提示
2. 消息处理
- 实时通信: 基于STOMP协议的实时双向通信
- 消息类型: 支持文本、系统、错误、心跳等多种消息类型
- AI状态: 显示AI思考状态和输入提示
- 消息确认: 消息发送状态跟踪
3. 用户体验
- 状态指示: 直观的连接状态显示
- 智能提示: 根据连接状态显示不同的输入提示
- 离线处理: 连接断开时禁用输入并显示提示
- 手动重连: 支持用户手动触发重连
4. 兼容性
- 用户模式: 支持注册用户和游客用户
- 会话管理: 自动管理会话ID和用户标识
- 降级处理: SockJS提供WebSocket降级支持
使用方法
1. 启动服务
# 启动后端服务
cd backend
./start-services.sh
# 启动前端服务
cd web-flowith
npm run dev
2. 访问页面
3. 测试功能
- 打开聊天页面,观察连接状态指示器
- 发送消息测试AI回复功能
- 断开网络测试自动重连功能
- 使用测试页面进行详细的WebSocket功能测试
消息流程
1. 连接建立
前端 → WebSocket连接 → 网关(19000) → emotion-websocket(19007)
2. 消息发送
用户输入 → WebSocket发送 → AI服务处理 → WebSocket返回 → 前端显示
3. 消息类型
- TEXT: 普通文本消息
- AI_THINKING: AI思考中状态
- CONNECTION: 连接状态消息
- ERROR: 错误消息
- SYSTEM: 系统消息
- HEARTBEAT: 心跳消息
配置说明
WebSocket配置
// 连接URL
VITE_WS_URL=http://localhost:19000/ws/chat
// 重连配置
VITE_WS_RECONNECT_ATTEMPTS=5
VITE_WS_RECONNECT_INTERVAL=3000
VITE_WS_HEARTBEAT_INTERVAL=30000
网关路由
# WebSocket REST API
- id: emotion-websocket-route
uri: http://localhost:19007
predicates: [Path=/websocket/**]
# WebSocket连接
- id: emotion-websocket-ws-route
uri: ws://localhost:19007
predicates: [Path=/ws/**]
优势特点
1. 实时性
- 消息即时推送,无需轮询
- AI回复实时显示
- 连接状态实时更新
2. 可靠性
- 自动重连机制
- 心跳检测保持连接
- 完善的错误处理
3. 用户体验
- 直观的状态指示
- 智能的输入提示
- 流畅的交互体验
4. 可扩展性
- 支持多种消息类型
- 易于添加新功能
- 模块化设计
后续优化建议
- 消息持久化: 将聊天记录保存到本地存储
- 文件传输: 支持图片、文件等多媒体消息
- 消息状态: 显示消息已读、未读状态
- 通知功能: 集成浏览器通知API
- 性能优化: 消息列表虚拟滚动
- 主题切换: 支持暗色模式
- 快捷操作: 添加常用回复快捷键
总结
WebSocket集成已完成,实现了:
- ✅ 完整的实时通信功能
- ✅ 稳定的连接管理
- ✅ 优秀的用户体验
- ✅ 完善的错误处理
- ✅ 灵活的配置管理
前端现在可以通过WebSocket与AI进行实时对话,提供了流畅、稳定的聊天体验!🚀