Files
happy-life-star/backend/emotion-websocket
peanut 8bfc2649e5 feat: 完善部署脚本系统,添加所有微服务模块
🚀 新增服务:
- emotion-explore (端口19005) - 探索服务
- emotion-reward (端口19006) - 奖励服务
- emotion-stats (端口19009) - 统计服务

🔧 脚本优化:
- 修复所有部署脚本的SSH连接格式为严格的 ssh 'root@47.111.10.27'
- 重新创建所有单服务部署脚本,确保语法正确
- 统一所有脚本的模板和格式
- 修复端口冲突问题 (emotion-stats从19008改为19009)

 完整服务列表:
- emotion-gateway:19000 - API网关
- emotion-user:19001 - 用户服务
- emotion-ai:19002 - AI聊天服务
- emotion-record:19003 - 记录服务
- emotion-growth:19004 - 成长服务
- emotion-explore:19005 - 探索服务
- emotion-reward:19006 - 奖励服务
- emotion-websocket:19007 - WebSocket服务
- emotion-auth:19008 - 认证服务
- emotion-stats:19009 - 统计服务

🔐 安全配置:
- 所有脚本使用SSH公钥认证
- 统一的MySQL密码配置: EmotionMuseum2025*#
- 统一的Nacos密码配置: Peanut2817*#

 测试验证:
- 所有脚本语法检查通过 
- SSH连接测试成功 
- 远程服务器Docker环境正常 
- 脚本执行权限设置完成 
2025-07-18 12:54:24 +08:00
..

Emotion WebSocket 聊天服务

概述

emotion-websocket 是情绪博物馆项目的WebSocket聊天微服务,提供实时聊天功能,支持用户与AI的实时对话。

功能特性

  • WebSocket实时通信
  • 用户与AI实时对话
  • 会话管理
  • 消息状态跟踪
  • 心跳检测
  • 在线用户管理
  • 消息广播
  • 异步AI响应处理

技术栈

  • Spring Boot 3.0.2
  • Spring WebSocket
  • STOMP协议
  • SockJS
  • Spring Cloud Alibaba
  • Nacos服务发现
  • OpenFeign服务调用
  • MyBatis Plus
  • MySQL
  • Redis

端口配置

  • 服务端口: 19007
  • WebSocket端点: /ws/chat

API接口

WebSocket端点

ws://localhost:19007/ws/chat

STOMP消息映射

  • /app/chat.send - 发送聊天消息
  • /app/chat.connect - 用户连接
  • /app/chat.disconnect - 用户断开连接
  • /app/chat.heartbeat - 心跳检测

订阅端点

  • /user/queue/messages - 用户私有消息
  • /topic/conversation/{conversationId} - 会话消息
  • /topic/broadcast - 广播消息

REST API

发送测试消息

POST /websocket/send?userId={userId}&message={message}

广播测试消息

POST /websocket/broadcast?message={message}

获取在线用户

GET /websocket/online-users

消息格式

聊天请求 (ChatRequest)

{
  "conversationId": "会话ID",
  "content": "消息内容",
  "senderId": "发送者ID",
  "senderType": "USER|GUEST|AI|SYSTEM",
  "messageType": "TEXT|TYPING|SYSTEM|ERROR|HEARTBEAT|CONNECTION|AI_THINKING"
}

WebSocket消息 (WebSocketMessage)

{
  "messageId": "消息ID",
  "conversationId": "会话ID",
  "type": "TEXT|TYPING|SYSTEM|ERROR|HEARTBEAT|CONNECTION|AI_THINKING",
  "content": "消息内容",
  "senderId": "发送者ID",
  "senderType": "USER|GUEST|AI|SYSTEM",
  "status": "SENDING|SENT|DELIVERED|READ|FAILED",
  "createTime": "2025-07-17 15:30:00",
  "data": {}
}

启动方式

本地开发启动

  1. 确保MySQL和Redis服务已启动
  2. 确保Nacos服务已启动
  3. 启动emotion-ai服务(WebSocket服务依赖AI服务)
# 进入项目根目录
cd backend

# 启动单个服务
cd emotion-websocket
mvn spring-boot:run -Dspring-boot.run.profiles=local

# 或使用统一启动脚本
./start-services.sh

Docker启动

# 构建镜像
cd emotion-websocket
docker build -t emotion-websocket:1.0.0 .

# 运行容器
docker run -d \
  --name emotion-websocket \
  -p 19007:19007 \
  -e SPRING_PROFILES_ACTIVE=prod \
  emotion-websocket:1.0.0

测试方法

1. 使用内置测试页面

访问: http://localhost:19007/websocket-test.html

2. 使用JavaScript客户端

// 连接WebSocket
const socket = new SockJS('http://localhost:19007/ws/chat');
const stompClient = Stomp.over(socket);

stompClient.connect({}, function (frame) {
    console.log('Connected: ' + frame);
    
    // 订阅消息
    stompClient.subscribe('/user/queue/messages', function (message) {
        const messageData = JSON.parse(message.body);
        console.log('Received:', messageData);
    });
    
    // 发送消息
    const chatRequest = {
        content: "Hello AI!",
        senderId: "test-user",
        senderType: "USER",
        messageType: "TEXT",
        conversationId: "test-conversation"
    };
    
    stompClient.send("/app/chat.send", {}, JSON.stringify(chatRequest));
});

3. 使用REST API测试

# 发送测试消息
curl -X POST "http://localhost:19007/websocket/send?userId=test-user&message=Hello"

# 广播消息
curl -X POST "http://localhost:19007/websocket/broadcast?message=System Message"

# 查看在线用户
curl -X GET "http://localhost:19007/websocket/online-users"

配置说明

application.yml

server:
  port: 19007

spring:
  application:
    name: emotion-websocket

application-local.yml

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

日志配置

日志文件位置: logs/emotion-websocket.log

查看日志:

tail -f logs/emotion-websocket.log

监控端点

注意事项

  1. WebSocket服务依赖emotion-ai服务,请确保AI服务已启动
  2. 需要配置正确的Nacos服务发现地址
  3. 确保数据库连接配置正确
  4. 生产环境需要配置适当的跨域策略
  5. 建议配置负载均衡和会话粘性

故障排查

常见问题

  1. 连接失败

    • 检查服务是否启动: curl http://localhost:19007/actuator/health
    • 检查端口是否被占用: lsof -i :19007
  2. AI回复失败

    • 检查emotion-ai服务是否正常
    • 查看日志中的Feign调用错误
  3. 消息发送失败

    • 检查WebSocket连接状态
    • 查看浏览器控制台错误信息

日志级别调整

logging:
  level:
    com.emotionmuseum.websocket: DEBUG
    org.springframework.web.socket: DEBUG

开发指南

添加新的消息类型

  1. WebSocketMessage.MessageType枚举中添加新类型
  2. ChatWebSocketController中添加对应的处理方法
  3. ChatWebSocketServiceImpl中实现具体逻辑

扩展功能

  • 添加文件传输支持
  • 实现消息持久化
  • 添加消息加密
  • 实现群聊功能
  • 添加消息撤回功能