Files
happy-life-star/web-flowith/WebSocket集成总结.md
T
peanut c77352877d feat: 完成Nacos配置优化和WebSocket集成
主要更新:
1. 统一所有微服务端口配置(19000-19008)
2. 为所有服务创建本地/测试/生产三套环境配置
3. 配置Nacos认证密码(本地:Peanut2817*#, 测试/生产:EmotionMuseum2025)
4. 优化网关路由配置,支持负载均衡和WebSocket
5. 新增emotion-websocket模块,支持实时聊天
6. 前端集成WebSocket,替代HTTP轮询
7. 添加配置验证和管理工具脚本

技术特性:
- 完整的环境隔离和服务发现
- WebSocket实时通信支持
- 负载均衡路由配置
- 跨域和安全配置
- 自动重连和心跳检测
2025-07-17 18:10:45 +08:00

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. 测试功能

  1. 打开聊天页面,观察连接状态指示器
  2. 发送消息测试AI回复功能
  3. 断开网络测试自动重连功能
  4. 使用测试页面进行详细的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. 可扩展性

  • 支持多种消息类型
  • 易于添加新功能
  • 模块化设计

后续优化建议

  1. 消息持久化: 将聊天记录保存到本地存储
  2. 文件传输: 支持图片、文件等多媒体消息
  3. 消息状态: 显示消息已读、未读状态
  4. 通知功能: 集成浏览器通知API
  5. 性能优化: 消息列表虚拟滚动
  6. 主题切换: 支持暗色模式
  7. 快捷操作: 添加常用回复快捷键

总结

WebSocket集成已完成,实现了:

  • 完整的实时通信功能
  • 稳定的连接管理
  • 优秀的用户体验
  • 完善的错误处理
  • 灵活的配置管理

前端现在可以通过WebSocket与AI进行实时对话,提供了流畅、稳定的聊天体验!🚀