vue3-homework/WEBSOCKET_TEST_GUIDE.md

112 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WebSocket 聊天系统测试指南
## 🚀 功能特性
### 1. 用户管理
- ✅ 用户登录/退出
- ✅ 在线用户实时显示
- ✅ 用户上线/下线通知
### 2. 消息类型
-**广播消息** - 所有在线用户都能收到
-**私聊消息** - 点对点发送给特定用户
-**系统消息** - 用户上线/下线通知
### 3. 技术实现
- **后端**: Spring Boot + WebSocket + STOMP
- **前端**: Vue 3 + Element Plus + TypeScript
- **消息协议**: STOMP over SockJS
## 🧪 测试步骤
### 1. 启动后端服务
```bash
cd ws-begin
mvn spring-boot:run
```
后端将在 `http://localhost:8080` 启动
### 2. 启动前端服务
```bash
cd my-vue3-app
npm run dev
```
前端将在 `http://localhost:5173` 启动
### 3. 测试广播消息
1. 访问 `/test` 页面
2. 输入用户IDuser1并点击"登录"
3. 点击"发送广播消息"按钮
4. 查看广播消息列表
### 4. 测试私聊功能
1. 打开两个浏览器窗口(或无痕模式)
2. 分别以不同用户ID登录user1, user2
3. 在在线用户列表中选择要发送的用户
4. 输入私聊消息并发送
5. 查看私聊记录
### 5. 测试用户状态
1. 用户登录时,其他用户会收到上线通知
2. 用户关闭页面时,会收到下线通知
3. 在线用户列表实时更新
## 📡 API 端点
### WebSocket 端点
- **连接**: `ws://localhost:8080/ws`
- **协议**: STOMP over SockJS
### 消息映射
- `/app/login` - 用户登录
- `/app/send` - 发送广播消息
- `/app/sendToUser` - 发送私聊消息
### 订阅主题
- `/topic/messages` - 广播消息
- `/topic/users` - 用户状态变化
- `/user/queue/private` - 私聊消息
### REST API
- `GET /api/onlineUsers` - 获取在线用户列表
## 🔧 关键功能说明
### sendToUser 功能
```java
@MessageMapping("/sendToUser")
public void sendToUser(@Payload Message message, @Header("simpSessionId") String sessionId) {
// 检查接收者是否在线
if (userSessionService.isUserOnline(message.getReceiver())) {
// 发送给特定用户
simpMessagingTemplate.convertAndSendToUser(
message.getReceiver(),
"/queue/private",
message
);
}
}
```
### 前端私聊订阅
```typescript
// 订阅私聊消息
stompClient?.subscribe('/user/queue/private', (msg) => {
console.log('收到私聊消息:', msg)
// 处理私聊消息...
})
```
## 🎯 测试要点
1. **多用户测试**: 使用多个浏览器窗口模拟多用户
2. **消息准确性**: 确保私聊消息只有指定用户能收到
3. **状态同步**: 用户上线/下线状态正确同步
4. **错误处理**: 向离线用户发送消息的错误提示
## 🐛 常见问题
1. **消息重复**: 已解决订阅重复问题
2. **跨域问题**: 已配置 CORS 支持
3. **连接失败**: 检查后端服务是否启动
4. **私聊失败**: 确保目标用户已登录且在线