xiangyixiangqin/README_SignalR.md
2026-01-14 20:23:13 +08:00

5.8 KiB
Raw Blame History

相宜相亲 - SignalR 实时通讯功能

功能状态: 已完整实现
📅 完成日期: 2026-01-14
🚀 可立即使用


🎯 功能概述

相宜相亲小程序的 SignalR 实时通讯功能已经完整实现,支持:

  • 实时消息推送 - 发送消息后对方立即收到,无需刷新
  • 交换功能推送 - 交换微信/照片请求和响应实时推送
  • 断线重连 - 网络断开后自动重连,用户无感知
  • 心跳检测 - 保持连接活跃,及时发现异常
  • 多设备支持 - 同一用户可在多个设备同时在线
  • 会话隔离 - 消息只推送给相关用户,不会串台

📚 文档导航

🚀 快速开始

📖 详细文档

📋 功能报告


5分钟快速测试

1. 启动后端

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


🏗️ 技术架构

后端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. 实时消息推送

// 前端监听
signalR.on('ReceiveMessage', (message) => {
  console.log('收到新消息:', message)
  messages.value.push(message)
})

// 后端推送
await _hubContext.SendNewMessageAsync(receiverId, message)

2. 断线重连

// 自动重连(指数退避策略)
// 1s → 2s → 4s → 8s → 16s
// 最多重连 5 次

3. 心跳检测

// 每 15 秒发送一次 Ping
// 保持连接活跃

📊 性能指标

指标 预期值
消息延迟 < 500ms
并发连接 10,000+
消息吞吐 1,000+ 消息/秒
重连时间 < 5 秒

🧪 测试清单

  • 连接测试
  • 实时消息推送测试
  • 交换微信请求测试
  • 交换响应测试
  • 断线重连测试
  • 心跳检测测试
  • 多设备同时在线测试
  • 会话隔离测试

详细测试步骤请参考:miniapp/SignalR测试指南.md


🚀 生产环境部署

关键配置

1. Nginx 配置WebSocket 支持)

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 配置

# 使用 Let's Encrypt
sudo certbot --nginx -d app.zpc-xy.com

3. Redis 配置(多服务器部署)

builder.Services.AddSignalR()
    .AddStackExchangeRedis(connectionString);

详细配置请参考:server/SignalR生产环境配置.md


🔍 故障排查

连接失败

# 检查后端服务
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

调试命令

# 查看后端进程
ps aux | grep dotnet

# 测试 WebSocket
npm install -g wscat
wscat -c ws://localhost:5000/hubs/chat

🎉 总结

SignalR 实时通讯功能已经完整实现,包括:

  • 后端 ChatHub 完整实现
  • 前端 SignalR 客户端完整封装
  • 聊天页面完整集成
  • 断线重连机制
  • 心跳检测机制
  • 完整的文档和测试指南

立即开始: 参考 SignalR快速启动指南.md

生产部署: 参考 server/SignalR生产环境配置.md


版本: v1.0
状态: 生产就绪
更新日期: 2026-01-14