254 lines
5.8 KiB
Markdown
254 lines
5.8 KiB
Markdown
# 相宜相亲 - SignalR 实时通讯功能
|
||
|
||
> ✅ **功能状态**: 已完整实现
|
||
> 📅 **完成日期**: 2026-01-14
|
||
> 🚀 **可立即使用**
|
||
|
||
---
|
||
|
||
## 🎯 功能概述
|
||
|
||
相宜相亲小程序的 SignalR 实时通讯功能已经完整实现,支持:
|
||
|
||
- ✅ **实时消息推送** - 发送消息后对方立即收到,无需刷新
|
||
- ✅ **交换功能推送** - 交换微信/照片请求和响应实时推送
|
||
- ✅ **断线重连** - 网络断开后自动重连,用户无感知
|
||
- ✅ **心跳检测** - 保持连接活跃,及时发现异常
|
||
- ✅ **多设备支持** - 同一用户可在多个设备同时在线
|
||
- ✅ **会话隔离** - 消息只推送给相关用户,不会串台
|
||
|
||
---
|
||
|
||
## 📚 文档导航
|
||
|
||
### 🚀 快速开始
|
||
- **[SignalR快速启动指南.md](./SignalR快速启动指南.md)** - 5分钟快速测试
|
||
|
||
### 📖 详细文档
|
||
- **[SignalR实现总结.md](./SignalR实现总结.md)** - 完整实现总结
|
||
- **[miniapp/SignalR测试指南.md](./miniapp/SignalR测试指南.md)** - 完整测试指南
|
||
- **[server/SignalR生产环境配置.md](./server/SignalR生产环境配置.md)** - 生产环境配置
|
||
|
||
### 📋 功能报告
|
||
- **[miniapp/聊天功能检查报告.md](./miniapp/聊天功能检查报告.md)** - 功能检查报告
|
||
- **[miniapp/即时通讯方案说明.md](./miniapp/即时通讯方案说明.md)** - 技术方案说明
|
||
|
||
---
|
||
|
||
## ⚡ 5分钟快速测试
|
||
|
||
### 1. 启动后端
|
||
```bash
|
||
cd server/src/XiangYi.AppApi
|
||
dotnet run
|
||
```
|
||
|
||
### 2. 启动小程序
|
||
- 打开 HBuilderX 或微信开发者工具
|
||
- 导入 `miniapp` 目录
|
||
- 运行到浏览器或微信开发者工具
|
||
|
||
### 3. 测试实时消息
|
||
1. 准备 2 个测试账号(A 和 B)
|
||
2. 账号 A 和 B 分别登录小程序
|
||
3. 进入聊天页面
|
||
4. 账号 A 发送消息:"你好"
|
||
5. 账号 B **立即**看到消息(无需刷新)
|
||
|
||
✅ **如果看到实时消息,说明 SignalR 工作正常!**
|
||
|
||
详细步骤请参考:[SignalR快速启动指南.md](./SignalR快速启动指南.md)
|
||
|
||
---
|
||
|
||
## 🏗️ 技术架构
|
||
|
||
### 后端(ASP.NET Core 8.0)
|
||
```
|
||
server/src/XiangYi.AppApi/
|
||
├── Hubs/
|
||
│ └── ChatHub.cs # SignalR Hub 实现
|
||
├── Controllers/
|
||
│ └── ChatController.cs # 集成 SignalR 推送
|
||
└── Program.cs # SignalR 配置
|
||
```
|
||
|
||
### 前端(uni-app)
|
||
```
|
||
miniapp/
|
||
├── utils/
|
||
│ └── signalr.js # SignalR 客户端封装
|
||
├── pages/
|
||
│ └── chat/
|
||
│ └── index.vue # 聊天页面集成
|
||
└── config/
|
||
└── index.js # API 配置
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 核心功能
|
||
|
||
### 1. 实时消息推送
|
||
```javascript
|
||
// 前端监听
|
||
signalR.on('ReceiveMessage', (message) => {
|
||
console.log('收到新消息:', message)
|
||
messages.value.push(message)
|
||
})
|
||
|
||
// 后端推送
|
||
await _hubContext.SendNewMessageAsync(receiverId, message)
|
||
```
|
||
|
||
### 2. 断线重连
|
||
```javascript
|
||
// 自动重连(指数退避策略)
|
||
// 1s → 2s → 4s → 8s → 16s
|
||
// 最多重连 5 次
|
||
```
|
||
|
||
### 3. 心跳检测
|
||
```javascript
|
||
// 每 15 秒发送一次 Ping
|
||
// 保持连接活跃
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 性能指标
|
||
|
||
| 指标 | 预期值 |
|
||
|------|--------|
|
||
| 消息延迟 | < 500ms |
|
||
| 并发连接 | 10,000+ |
|
||
| 消息吞吐 | 1,000+ 消息/秒 |
|
||
| 重连时间 | < 5 秒 |
|
||
|
||
---
|
||
|
||
## 🧪 测试清单
|
||
|
||
- [ ] 连接测试
|
||
- [ ] 实时消息推送测试
|
||
- [ ] 交换微信请求测试
|
||
- [ ] 交换响应测试
|
||
- [ ] 断线重连测试
|
||
- [ ] 心跳检测测试
|
||
- [ ] 多设备同时在线测试
|
||
- [ ] 会话隔离测试
|
||
|
||
详细测试步骤请参考:[miniapp/SignalR测试指南.md](./miniapp/SignalR测试指南.md)
|
||
|
||
---
|
||
|
||
## 🚀 生产环境部署
|
||
|
||
### 关键配置
|
||
|
||
#### 1. Nginx 配置(WebSocket 支持)
|
||
```nginx
|
||
location /hubs/chat {
|
||
proxy_pass http://localhost:5000/hubs/chat;
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection "upgrade";
|
||
proxy_read_timeout 7d;
|
||
}
|
||
```
|
||
|
||
#### 2. SSL/TLS 配置
|
||
```bash
|
||
# 使用 Let's Encrypt
|
||
sudo certbot --nginx -d app.zpc-xy.com
|
||
```
|
||
|
||
#### 3. Redis 配置(多服务器部署)
|
||
```csharp
|
||
builder.Services.AddSignalR()
|
||
.AddStackExchangeRedis(connectionString);
|
||
```
|
||
|
||
详细配置请参考:[server/SignalR生产环境配置.md](./server/SignalR生产环境配置.md)
|
||
|
||
---
|
||
|
||
## 🔍 故障排查
|
||
|
||
### 连接失败
|
||
```bash
|
||
# 检查后端服务
|
||
curl http://localhost:5000/api/app/config/system
|
||
|
||
# 检查端口
|
||
netstat -tlnp | grep 5000
|
||
|
||
# 查看日志
|
||
tail -f server/src/XiangYi.AppApi/bin/Debug/net8.0/logs/log.txt
|
||
```
|
||
|
||
### 收不到消息
|
||
1. 检查 SignalR 是否连接成功
|
||
2. 查看浏览器控制台日志
|
||
3. 确认事件监听是否注册
|
||
|
||
### 常见错误
|
||
- `401 Unauthorized` - Token 过期,需要重新登录
|
||
- `WebSocket 创建失败` - 后端服务未启动或配置错误
|
||
- `连接超时` - 网络问题或防火墙阻止
|
||
|
||
---
|
||
|
||
## 📈 后续优化
|
||
|
||
### P1 - 重要优化
|
||
- [ ] 消息队列(RabbitMQ/Kafka)
|
||
- [ ] MessagePack 协议
|
||
- [ ] 监控告警系统
|
||
|
||
### P2 - 体验优化
|
||
- [ ] 消息已读回执
|
||
- [ ] 输入状态提示
|
||
- [ ] 消息撤回功能
|
||
|
||
---
|
||
|
||
## 📞 技术支持
|
||
|
||
### 查看日志
|
||
- **后端日志**: `server/src/XiangYi.AppApi/bin/Debug/net8.0/logs/`
|
||
- **前端日志**: 浏览器控制台(F12)
|
||
|
||
### 调试命令
|
||
```bash
|
||
# 查看后端进程
|
||
ps aux | grep dotnet
|
||
|
||
# 测试 WebSocket
|
||
npm install -g wscat
|
||
wscat -c ws://localhost:5000/hubs/chat
|
||
```
|
||
|
||
---
|
||
|
||
## 🎉 总结
|
||
|
||
SignalR 实时通讯功能已经**完整实现**,包括:
|
||
|
||
- ✅ 后端 ChatHub 完整实现
|
||
- ✅ 前端 SignalR 客户端完整封装
|
||
- ✅ 聊天页面完整集成
|
||
- ✅ 断线重连机制
|
||
- ✅ 心跳检测机制
|
||
- ✅ 完整的文档和测试指南
|
||
|
||
**立即开始**: 参考 [SignalR快速启动指南.md](./SignalR快速启动指南.md)
|
||
|
||
**生产部署**: 参考 [server/SignalR生产环境配置.md](./server/SignalR生产环境配置.md)
|
||
|
||
---
|
||
|
||
**版本**: v1.0
|
||
**状态**: ✅ 生产就绪
|
||
**更新日期**: 2026-01-14
|