feat(XCamera): 实现异步抓图功能并优化图像处理

fix(nginx): 调整企业微信回调代理路径

feat(gateway): 添加企业微信消息处理功能

docs: 更新项目规划文档和企业微信配置详情

refactor(XCamera): 重构LED检测和图像处理逻辑

test: 添加ONVIF抓图测试功能
This commit is contained in:
zqm
2026-03-31 11:04:43 +08:00
parent 1f5d05e6d6
commit cdf64fa31f
2605 changed files with 530175 additions and 1081 deletions

View File

@@ -192,7 +192,7 @@ wechat_app/ # 微信小程序项目目录(正确命名)
- **AppID和AppSecret**:小程序身份认证
- **用户登录**wx.login() 获取临时登录凭证code
- **会话密钥**服务端换取session\_key和openid
- **会话密钥**服务端换取session_key和openid
- **用户信息**wx.getUserInfo() 获取用户基本信息
- **权限管理**scope.userInfo、scope.userLocation等
@@ -655,8 +655,7 @@ REDIS_PERSISTENCE=false # 禁用持久化(纯内存)
-**域名pactgo.cn**
-**SSL证书已配置**
-**开放443端口**
- ✅ **nginx配置`d:rojects runkoyDlawocs
ginx.conf`**
-**nginx配置`d:\Projects\trunk\JoyD\Claw\docs\nginx.conf`**
**服务器BSmartClaw服务**
@@ -718,8 +717,7 @@ REDIS_PERSISTENCE=false # 禁用持久化(纯内存)
#### 6.2.3 nginx配置详解
**配置文件路径**`d:rojects runkoyDlawocs
ginx.conf`
**配置文件路径**`d:\Projects\trunk\JoyD\Claw\docs\nginx.conf`
**核心配置说明**已优化支持Embedded-Redis
@@ -1125,85 +1123,114 @@ REDIS_URL=redis://pactgo.cn:6379 # SmartClaw连接网关A的Redis
- ✅ **API封装**:统一请求封装,错误处理机制
- ✅ **后台配置**:服务器域名、业务域名配置方案
## 11. 当前项目状态2025年3月13日)- 基础设施就绪
## 11. 当前项目状态2025年3月19日)- 核心功能实现完成
### ✅ 已完成的基础设施
### ✅ 已完成的核心功能
**服务器A47.109.191.115 - pactgo.cn**
- ✅ **域名和SSL证书**pactgo.cn 已配置SSL证书
- ✅ **nginx配置**完整的反向代理配置支持HTTPS和WebSocket
- ✅ **网关服务编译**Rust服务监听127.0.0.1:8000无编译警告
- ✅ **企业微信回调地址**`https://pactgo.cn/wecom` 已配置
- ✅ **WebSocket通道**/ws/control 和 /ws/task 已配置代理
- ✅ **Embedded-Redis仅网关A启动**:多用户多设备状态管理中心
- ✅ **nginx配置**完整的反向代理配置支持HTTPS和WebSocket添加了X-Location-Path自定义头
- ✅ **网关服务**Rust服务监听127.0.0.1:8000无编译警告支持HTTPS和WSS
- ✅ **企业微信回调**`https://pactgo.cn/wecom` 已配置并测试通过,支持消息加密解密
- ✅ **WebSocket服务端**/api/v1/ws/control 和 /api/v1/ws/task 通道支持WSS
- ✅ **企业微信消息处理**支持消息加密解密、签名验证、自动回复修复了Windows 2012 AES解密问题
- ✅ **API接口**:健康检查、系统状态、任务处理等完整接口
**服务器B内网服务器**
- ✅ **SmartClaw服务编译**WebSocket客户端实现完成无编译警告
- ✅ **WebSocket客户端模块**:主动连接网关服务,支持长连接和心跳检测
- ✅ **内网Web管理接口**健康检查、系统状态、任务管理、WebSocket状态、LMStudio状态接口
- ✅ **LMStudio API集成**HTTP API调用框架已准备支持流式响应
- ✅ **HeedDB数据存储**:嵌入式数据库集成,支持任务状态和用户数据存储
- ✅ **优雅关闭机制**:支持服务优雅关闭和重连机制
- ✅ **SmartClaw服务**WebSocket客户端实现完成无编译警告支持WSS连接
- ✅ **配置管理**使用config.json进行统一配置管理与网关配置风格一致
- ✅ **WebSocket客户端**主动连接网关支持长连接和心跳检测添加了X-SmartClaw-Source自定义头
- ✅ **自动重连机制**支持无限重连max_reconnect_attempts: 0实现了start_with_reconnect()方法
- ✅ **内网Web管理接口**健康检查、系统状态、任务管理、WebSocket状态、LMStudio状态
- ✅ **LMStudio API集成**HTTP API调用框架支持流式响应
- ✅ **HeedDB数据存储**:嵌入式数据库,支持任务状态和用户数据
- ✅ **优雅关闭机制**:支持服务优雅关闭和重连
### ✅ 已验证的功能
### ✅ 已实现的技术特性
1. **编译验证**:两个服务都能成功编译,无警告
2. **WebSocket架构**:反向连接方案实现完成
3. **nginx代理**HTTPS和WebSocket代理配置完成
4. **API接口**:健康检查、系统状态、任务处理接口就绪
5. **测试接口**多个WebSocket测试接口可供验证
6. **数据库集成**HeedDB嵌入式数据库支持已集成
7. **SmartClaw完整功能实现**
- ✅ WebSocket客户端主动连接网关支持长连接和心跳检测
- ✅ 内网Web管理接口8个管理接口支持调试和状态查询
- ✅ LMStudio API集成HTTP调用框架支持流式响应
- ✅ HeedDB数据存储嵌入式数据库支持任务状态和用户数据
- ✅ Redis客户端连接网关A的Embedded-Redis参与多用户多设备管理
- ✅ 优雅关闭机制:支持服务优雅关闭和重连
- ✅ 6个WebSocket测试接口完整的通信功能验证
1. **WebSocket通信**
- SmartClaw主动连接网关的WSS服务
- 支持心跳检测和自动重连
- 双向实时通信,延迟低
- 添加了自定义头用于调试和标识
2. **配置管理**
- SmartClaw使用config.json配置文件与网关配置风格一致
- 支持网关连接、WebSocket参数、任务处理等配置
- max_reconnect_attempts: 0 实现无限重连
3. **企业微信集成**
- 支持GET请求URL验证
- 支持POST请求消息推送
- 消息加密解密AES-CBC-256修复了Windows 2012解密问题
- 签名验证和自动回复
4. **安全特性**
- WebSocket连接认证API Key
- 企业微信消息加密
- HTTPS强制使用
- 修复了SSL证书验证问题使用rustls-tls和webpki-roots
5. **测试接口**
- WebSocket连接测试
- 消息发送测试
- 任务处理测试
- 系统状态查询
### 🔄 下一步行动计划
**阶段一:连接测试(当前阶段)**
**阶段一:功能测试(当前阶段)**
1. 启动网关服务:`cargo run --release` 在服务器A
2. 启动SmartClaw服务`cargo run --release` 在服务器B
3. 验证WebSocket连接建立
4. 测试消息转发功能
1. **启动网关服务**`cargo run --release` 在服务器A
2. **启动SmartClaw服务**`cargo run --release` 在服务器B
3. **验证WebSocket连接**确认SmartClaw成功连接到网关
4. **测试消息转发**验证企业微信消息能正确转发到SmartClaw
5. **测试任务处理**验证SmartClaw能处理任务并返回结果
**阶段二:企业微信集成**
**阶段二:企业微信配置**
1. 在企业微信后台配置回调地址
2. 验证消息接收和响应
3. 测试任务下发流程
1. **在企业微信后台配置回调地址**`https://pactgo.cn/wecom`
2. **验证消息接收**:发送测试消息,确认网关能正确接收和处理
3. **测试自动回复**:确认企业微信能收到自动回复消息
4. **测试任务下发**:验证完整的任务流转流程
**阶段三:前端开发**
1. 微信小程序界面开发
2. 企业微信网页应用开发
3. 用户交互界面实现
1. **微信小程序界面开发**:登录、聊天、任务页面
2. **企业微信网页应用开发**:消息接口、菜单配置
3. **用户交互优化**:响应式设计、错误处理、加载动画
**预计完成时间**3-5天基于当前基础设施已就绪的状态
**阶段四:部署与监控**
1. **生产环境部署**:配置服务自动启动,静态链接编译
2. **监控系统**:日志监控、性能监控、告警机制
3. **故障排查**:完善错误处理和日志记录
**预计完成时间**5-7天基于当前核心功能已实现的状态
### 🎯 项目当前状态总结
**✅ 基础设施完全就绪**
**✅ 核心功能完全实现**
- **服务器A**47.109.191.115 (pactgo.cn) - SSL证书、nginx、网关服务全部配置完成
- **服务器B**:内网服务器 - SmartClaw服务、LMStudio、HeedDB全部集成完成
- **Embedded-Redis**零配置Redis集成无需独立服务
- **WebSocket架构**反向连接方案实现完成
- **编译状态**:两个服务零警告编译通过
- **服务器A**47.109.191.115 (pactgo.cn) - 网关服务、企业微信集成、WebSocket服务端全部完成支持HTTPS和WSS
- **服务器B**:内网服务器 - SmartClaw服务、WebSocket客户端、自动重连机制全部完成支持WSS连接
- **配置管理**config.json配置方案实现支持灵活配置与网关配置风格一致
- **WebSocket通信**双向实时通信,支持心跳检测和无限重连,添加了自定义头用于调试
- **企业微信集成**消息加密解密、签名验证、自动回复全部实现修复了Windows 2012 AES解密问题
- **安全特性**修复了SSL证书验证问题使用rustls-tls和webpki-roots支持系统根证书
- **编译状态**:两个服务零警告编译通过,支持静态链接
**🚀 立即可进入测试阶段**
1. **启动网关服务**服务器AEmbedded-Redis自动启动
2. **启动SmartClaw服务**服务器B连接网关A的Redis
1. **启动网关服务**服务器A
2. **启动SmartClaw服务**服务器B
3. **验证WebSocket连接**
4. **测试多用户多设备功能**
5. **测试企业微信集成**
4. **测试企业微信消息处理**
5. **测试任务流转流程**
6. **配置企业微信回调**
7. **开发前端界面**
## 12. 部署验证清单
@@ -1213,15 +1240,19 @@ REDIS_URL=redis://pactgo.cn:6379 # SmartClaw连接网关A的Redis
```bash
# 测试HTTPS访问
curl -k https://pactgo.cn/health
# 预期返回:healthy
curl -k https://pactgo.cn/api/v1/health
# 预期返回:健康检查响应
# 测试企业微信回调地址
curl -k https://pactgo.cn/wecom
# 预期返回:网关服务响应
# 测试WebSocket连接
wscat -c wss://pactgo.cn/ws/control
# 测试WebSocket连接WSS
wscat -c wss://pactgo.cn/api/v1/ws/control
# 预期:连接成功,可发送消息
# 测试WebSocket任务通道
wscat -c wss://pactgo.cn/api/v1/ws/task
# 预期:连接成功,可发送消息
```
@@ -1235,6 +1266,18 @@ tasklist | findstr gateway.exe
# 检查端口监听
netstat -an | findstr 8000
# 预期127.0.0.1:8000 处于监听状态
# 检查nginx是否运行
tasklist | findstr nginx.exe
# 预期显示nginx.exe进程
# 检查443端口监听
netstat -an | findstr 443
# 预期0.0.0.0:443 处于监听状态
# 检查SSL证书
openssl s_client -connect pactgo.cn:443
# 预期SSL证书验证通过使用系统根证书
```
### ✅ 服务器B验证内网服务器- SmartClaw完整功能验证
@@ -1246,28 +1289,43 @@ netstat -an | findstr 8000
tasklist | findstr smartclaw.exe
# 预期显示smartclaw.exe进程
# 2. 检查内网Web管理接口
# 2. 检查配置文件
# 查看配置文件内容
type config.json
# 预期显示完整的配置信息包括max_reconnect_attempts: 0与网关配置风格一致
# 3. 检查内网Web管理接口
# 健康检查接口
curl http://127.0.0.1:8080/api/v1/health
curl http://127.0.0.1:3001/api/v1/health
# 预期返回:服务状态信息
# 系统状态接口
curl http://127.0.0.1:8080/api/v1/system
curl http://127.0.0.1:3001/api/v1/system
# 预期返回:系统详细信息
# WebSocket状态接口
curl http://127.0.0.1:8080/api/v1/websocket
# 预期返回WebSocket连接状态
curl http://127.0.0.1:3001/api/v1/websocket
# 预期返回WebSocket连接状态显示WSS连接信息
# 3. 检查WebSocket连接状态
# 查看服务日志,确认已连接到 wss://pactgo.cn/ws/control
# 预期:显示连接成功信息
# 4. 检查WebSocket连接状态
# 查看服务日志,确认已连接到 wss://pactgo.cn/api/v1/ws/control
# 预期:显示连接成功信息包含X-SmartClaw-Source头
# 4. 测试内网管理接口功能
curl -X POST http://127.0.0.1:8080/api/v1/task \
# 5. 测试任务处理功能
curl -X POST http://127.0.0.1:3001/api/v1/task \
-H "Content-Type: application/json" \
-d '{"user_id":"test","task_type":"TextProcessing","content":"测试任务","priority":1}'
# 预期返回:任务处理结果
# 6. 测试WebSocket测试接口
curl -X POST http://127.0.0.1:3001/api/v1/test/websocket/send \
-H "Content-Type: application/json" \
-d '{"message":"测试WebSocket消息"}'
# 预期返回:测试消息发送结果
# 7. 测试自动重连机制
# 手动断开WebSocket连接查看服务日志
# 预期:显示重连尝试,最终重新连接成功
```
**LMStudio验证**服务器B
@@ -1280,464 +1338,109 @@ curl http://127.0.0.1:1234/v1/chat/completions \
# 预期返回AI响应结果
```
**多用户多设备功能验证**SmartClaw连接网关A的Redis
**企业微信集成验证**
```bash
# 1. 测试SmartClaw连接网关A的Redis
redis-cli -h pactgo.cn -p 6379 ping
# 预期返回PONG
# 测试企业微信消息接收
# 1. 在企业微信后台配置回调地址为https://pactgo.cn/wecom
# 2. 发送测试消息
# 3. 查看网关服务日志
# 预期:显示消息接收和处理日志
# 2. 测试用户设备注册通过SmartClaw接口
curl -X POST http://127.0.0.1:8080/api/v1/device/register \
-H "Content-Type: application/json" \
-d '{"user_id":"1001","device_id":"device_mobile_001","device_info":{"type":"mobile","name":"iPhone"}}'
# 预期返回:注册成功
# 测试企业微信消息回复
# 1. 发送测试消息
# 2. 查看企业微信是否收到自动回复
# 预期:收到自动回复消息
```
# 3. 验证用户设备路由网关A的Redis
redis-cli -h pactgo.cn -p 6379 HGET user_devices:1001 device_mobile_001
# 预期返回设备信息JSON
**故障排查验证**
# 4. 测试用户在线状态网关A的Redis
redis-cli -h pactgo.cn -p 6379 GET user:1001:online
# 预期返回1
```bash
# 检查SmartClaw服务日志
# 预期:显示连接状态、重连尝试等信息
# 5. 测试消息分发通过SmartClaw发送网关A路由
curl -X POST http://127.0.0.1:8080/api/v1/message/send \
-H "Content-Type: application/json" \
-d '{"user_id":"1001","device_id":"device_mobile_001","content":"测试消息"}'
# 预期返回:消息发送成功
# 检查网关服务日志
# 预期显示WebSocket连接、消息处理等信息
# 测试网络连通性
ping pactgo.cn
# 预期:网络连通
# 测试SSL证书
openssl s_client -connect pactgo.cn:443
# 预期SSL证书验证通过
```
### 🔧 故障排查指南
**SmartClaw服务启动失败**
1. 检查端口占用:`netstat -an | findstr 8080`
2. 检查HeedDB路径是否存在`dir C:/Claw/data/heedb`
3. 检查LMStudio是否运行`netstat -an | findstr 1234`
4. 查看服务日志:检查启动错误信息
5. 检查环境变量:确认所有配置参数正确
1. **检查端口占用**`netstat -an | findstr 3001`
2. **检查配置文件**确认config.json存在且格式正确与网关配置风格完全一致
- 检查配置文件结构是否完整
- 验证网关URL、API密钥等参数是否正确
- 确保JSON格式无误
3. **检查HeedDB路径**`dir C:/Claw/data/heedb`
4. **检查LMStudio状态**`netstat -an | findstr 1234`
5. **查看服务日志**:检查启动错误信息,特别是配置文件解析错误
6. **检查网络连接**`ping pactgo.cn`
7. **检查SSL证书**确认SSL证书有效使用系统根证书
**WebSocket连接失败**
1. 检查服务器B是否能访问外网`ping pactgo.cn`
2. 检查服务器A的nginx是否运行`tasklist | findstr nginx`
3. 检查防火墙设置确认443端口开放
4. 查看服务日志:检查连接错误信息
**多用户多设备功能故障**
1. 检查网关A的Embedded-Redis是否启动`redis-cli -h pactgo.cn -p 6379 ping`
2. 检查SmartClaw连接网关A的Redis`redis-cli -h pactgo.cn -p 6379 info`
3. 检查用户设备注册是否成功:`redis-cli -h pactgo.cn -p 6379 HGETALL user_devices:1001`
4. 检查消息分发日志查看网关A的日志文件
5. 检查设备在线状态:`redis-cli -h pactgo.cn -p 6379 GET user:1001:online`
1. **检查网络连通性**`ping pactgo.cn`
2. **检查nginx状态**`tasklist | findstr nginx.exe`
3. **检查防火墙设置**确认443端口开放
4. **检查WebSocket路径**:确认使用正确的路径 `/api/v1/ws/control`
5. **查看SmartClaw日志**检查连接错误信息特别是SSL验证错误
6. **查看网关日志**检查WebSocket握手错误
7. **测试SSL连接**`openssl s_client -connect pactgo.cn:443`
8. **检查自定义头**确认X-SmartClaw-Source头正确设置
**企业微信回调失败**
1. 验证HTTPS证书浏览器访问 <https://pactgo.cn>
2. 检查回调地址配置:确认是 <https://pactgo.cn/wecom>
3. 测试回调接口使用curl模拟POST请求
4. 查看nginx错误日志`C:/nginx/logs/error.log`
1. **验证HTTPS证书**:浏览器访问 <https://pactgo.cn>
2. **检查回调地址**:确认是 <https://pactgo.cn/wecom>
3. **测试回调接口**`curl -k -X POST https://pactgo.cn/wecom`
4. **查看网关日志**:检查消息处理错误
5. **查看nginx日志**`C:/nginx/logs/error.log`
6. **检查签名验证**确认token、corpid等配置正确
7. **检查消息解密**确认EncodingAESKey正确已补全=号使用正确的Base64解码方式
8. **检查Windows 2012 AES解密**确认使用了PKCS7填充
**服务启动失败**(网关服务):
1. 检查端口占用:`netstat -an | findstr 8000`
2. 查看依赖项确认所有DLL文件存在
3. 检查配置文件:确认环境变量设置正确
4. 查看应用程序日志:检查具体错误信息
**SmartClaw服务启动失败**(内网服务):
1. 检查端口占用:`netstat -an | findstr 8080`
2. 检查HeedDB路径是否存在`dir C:/Claw/data/heedb`
3. 检查LMStudio是否运行`netstat -an | findstr 1234`
4. 查看服务日志:检查启动错误信息
5. 检查环境变量:确认所有配置参数正确
## 13. Embedded-Redis完整解决方案总结
### 🎯 方案优势
**Embedded-Redis方案** 完美解决了多用户多设备复杂场景的核心需求:
#### 🎯 多用户多设备核心需求
**Embedded-Redis必选原因**
- **多用户在线状态**:实时管理用户登录状态
- **多设备路由表**:精确的用户→设备映射关系
- **消息分发机制**:保证不串线的消息路由
- **高并发支持**:支持大量用户同时在线
- **零配置部署**:降低运维复杂度
#### ✅ 零配置部署
- **无需安装**直接集成在gateway.exe中
- **无需配置**:自动启动,随机端口
- **无需维护**:服务生命周期自动管理
- **无需监控**:异常直接体现在应用日志中
#### ✅ 降低复杂度
- **单进程设计**gateway.exe包含Web服务+Redis+数据库
- **统一日志**:所有日志集中在一个服务中
- **统一配置**:环境变量统一管理
- **统一监控**:只需监控一个服务状态
#### ✅ 资源优化
- **内存共享**:与应用进程共享内存空间
- **CPU优化**:减少进程间通信开销
- **磁盘优化**纯内存模式无需磁盘I/O
- **网络优化**:本地通信,无网络延迟
### 🔧 技术实现
**Embedded-Redis在网关服务中的应用**
```rust
// 嵌入式Redis启动自动管理
let redis_server = EmbeddedRedis::new()
.port(0) // 随机端口
.maxmemory(64 * 1024 * 1024) // 64MB内存限制
.persistence(false) // 纯内存模式
.start()?;
// 自动获取连接
let redis_client = redis::Client::open(redis_server.connection_string())?;
```
**使用场景**
- **任务队列**:异步任务存储和分发
- **会话管理**:用户会话状态缓存
- **消息缓存**WebSocket消息临时存储
- **访问计数**:接口访问统计
- **配置缓存**:系统配置缓存
### 📊 性能对比
| 指标 | 独立Redis | Embedded-Redis | 提升 |
| -------- | ------- | -------------- | ---------- |
| **启动时间** | 2-5秒 | 0.1秒 | **20-50倍** |
| **内存占用** | 100MB+ | 64MB | **节省36%** |
| **部署步骤** | 5步+ | 1步 | **5倍简化** |
| **故障点** | 多进程 | 单进程 | **减少80%** |
| **维护成本** | 高 | 零 | **100%节省** |
### 🚀 部署简化
**传统Redis部署** vs **Embedded-Redis部署**
```bash
# 传统Redis部署5步
1. 下载Redis
2. 解压安装
3. 配置redis.conf
4. 启动Redis服务
5. 验证连接
# Embedded-Redis部署1步
1. 启动gateway.exeRedis自动启动
```
### 🎯 架构分工明确
**网关A47.109.191.115**
- ✅ **Embedded-Redis服务器**:多用户多设备状态管理中心
- ✅ **WebSocket服务端**接收SmartClaw连接
- ✅ **多用户状态管理**:在线状态、设备路由、消息分发
- ✅ **HTTPS网关**企业微信回调、API接口
**SmartClaw服务内网服务器**
- ✅ **WebSocket客户端**连接网关A的WebSocket
- ✅ **Redis客户端**连接网关A的Embedded-Redis
- ✅ **LMStudio集成**AI能力调用
- ✅ **HeedDB存储**:本地数据持久化
- ✅ **内网管理接口**:调试和状态查询
**分工优势**
- **单点管理**所有用户状态集中网关A管理
- **简化部署**SmartClaw服务无需启动Redis服务
- **降低复杂度**:各服务职责单一明确
- **提高可靠性**网关A统一管理避免状态不一致
## 14. 多用户多设备完整架构总结
### 🎯 核心需求解决
**Embedded-Redis必选方案** 完美解决了多用户多设备复杂场景:
#### 1⃣ 多用户在线状态管理
```
场景1000+用户同时在线,需要实时状态同步
解决Redis Set + Hash + TTL 组合
- 在线用户集合SADD online_users {user_id}
- 用户状态详情HSET user:{user_id} status online last_seen {timestamp}
- 自动过期清理EXPIRE user:{user_id}:online 3600
```
#### 2⃣ 多设备精确路由(保证不串线)
```
场景:用户有多个设备(手机、平板、电脑),消息不能发错设备
解决:双向映射表 + 设备状态检查
- 用户→设备映射HSET user_devices:{user_id} {device_id} "{device_info}"
- 设备→用户映射HSET device_user:{device_id} {user_id} "{user_info}"
- 设备状态检查GET device:{device_id}:status
- 消息精确路由只发送到指定device_id
```
#### 3⃣ 消息分发机制(高可靠性)
```
场景:消息不能丢失,不能重复,保证顺序
解决:队列 + 发布订阅 + 确认机制 + 重发机制
- 消息队列LPUSH msg_queue:{user_id} {message}
- 设备发布PUBLISH device:{device_id} {message}
- 消息确认SET msg_ack:{msg_id}:{device_id} "pending" EX 300
- 重发机制ZADD retry_queue {timestamp+30} {msg_id}
```
### 🔧 数据结构设计
#### 用户在线状态
```redis
# 用户登录
SET user:1001:online "1" EX 3600
SET user:1001:last_seen "2025-03-13 10:30:00" EX 3600
SADD online_users "1001"
# 用户心跳
EXPIRE user:1001:online 3600
SET user:1001:last_seen "2025-03-13 10:35:00" EX 3600
# 用户下线
DEL user:1001:online
SREM online_users "1001"
```
#### 多设备路由表
```redis
# 用户绑定设备
HSET user_devices:1001 device_mobile_001 "{\"type\":\"mobile\",\"name\":\"iPhone\"}"
HSET user_devices:1001 device_tablet_002 "{\"type\":\"tablet\",\"name\":\"iPad\"}"
HSET device_user:device_mobile_001 1001 "{\"name\":\"张三\",\"avatar\":\"url\"}"
SET device:device_mobile_001:status "online" EX 3600
# 查询用户设备
HGETALL user_devices:1001
# 返回:{device_mobile_001: "{\"type\":\"mobile\",\"name\":\"iPhone\"}", device_tablet_002: "{\"type\":\"tablet\",\"name\":\"iPad\"}"}
```
#### 消息分发流程
```redis
# 1. 网关接收消息,确定目标用户和设备
# 2. 查询用户设备路由
HGET user_devices:1001 device_mobile_001
# 3. 检查设备在线状态
GET device:device_mobile_001:status
# 4. 发布消息到设备
PUBLISH device:device_mobile_001 "{\"msg_id\":\"msg123\",\"content\":\"Hello\"}"
# 5. 设置消息确认
SET msg_ack:msg123:device_mobile_001 "pending" EX 300
# 6. 添加到重试队列如果30秒内未确认
ZADD retry_queue 1741857300 msg123
```
### 📊 性能指标
| 功能 | 复杂度 | 响应时间 | 内存使用 | 可靠性 |
| ------ | -------- | ----- | ---- | ------ |
| 用户状态查询 | O(1) | <1ms | 低 | 99.9% |
| 设备路由查询 | O(1) | <1ms | 低 | 99.9% |
| 消息分发 | O(log n) | <5ms | 中 | 99.99% |
| 在线用户列表 | O(n) | <10ms | 中 | 99.9% |
### ✅ 当前实现状态
**多用户多设备核心功能全部实现**
- ✅ **多用户在线状态**:实时用户状态管理
- ✅ **多设备路由表**user→device精确映射
- ✅ **消息分发机制**:保证不串线的消息路由
- ✅ **消息队列**:有序消息存储和分发
- ✅ **消息确认**:防丢失的确认机制
- ✅ **重发机制**:可靠的消息重发策略
- ✅ **Embedded-Redis**零配置Redis集成
## 15. 完整系统架构总结
### 🎯 系统架构分工
**网关A47.109.191.115 - pactgo.cn**
- ✅ **Embedded-Redis服务器**多用户多设备状态管理中心仅A启动
- ✅ **WebSocket服务端**接收SmartClawB连接
- ✅ **HTTPS网关**企业微信回调、API接口
- ✅ **多用户状态管理**:在线状态、设备路由、消息分发
**SmartClaw服务内网服务器**
- ✅ **WebSocket客户端**连接网关A的WebSocket
- ✅ **Redis客户端**连接网关A的Embedded-Redis
- ✅ **LMStudio集成**AI能力调用
- ✅ **HeedDB存储**:本地数据持久化
- ✅ **内网管理接口**:调试和状态查询
### 🔧 核心功能实现
#### 1⃣ 多用户多设备管理网关A
- **用户在线状态**SET user:{id}:online + SADD online\_users
- **设备路由表**HSET user\_devices:{user\_id} {device\_id} {info}
- **消息精确分发**PUBLISH device:{device\_id} {message}
- **消息确认机制**SET msg\_ack:{msg\_id}:{device\_id} pending
#### 2⃣ WebSocket反向连接SmartClaw→网关A
- **SmartClaw服务主动连接**wss\://pactgo.cn/ws/control
- **长连接保持**:心跳检测 + 断线重连
- **双向实时通信**:任务下发 + 结果回传
- **连接状态管理**:在线状态 + 异常处理
#### 3⃣ 企业微信集成网关A
- **HTTPS回调**<https://pactgo.cn/wecom>
- **消息接收处理**:解析 + 路由 + 转发
- **响应回传**:结果封装 + 状态更新
- **错误处理**:重试机制 + 异常捕获
#### 4⃣ AI能力集成SmartClaw服务
- **LMStudio调用**<http://127.0.0.1:1234/v1/chat/completions>
- **流式响应支持**SSE + 实时输出
- **任务状态管理**:处理中 + 已完成 + 异常
- **结果缓存**:临时存储 + 快速响应
### 📊 性能指标
| 功能模块 | 响应时间 | 并发能力 | 可靠性 | 内存占用 |
| ----------- | ------ | ------- | ------ | ---- |
| 用户状态查询 | <1ms | 10,000+ | 99.9% | 低 |
| 设备路由查询 | <1ms | 10,000+ | 99.9% | 低 |
| 消息分发 | <5ms | 5,000+ | 99.99% | 中 |
| WebSocket连接 | <100ms | 1,000+ | 99.9% | 中 |
| AI任务处理 | <5s | 100+ | 99.5% | 高 |
### ✅ 当前实现状态
**基础设施完全就绪**
- ✅ 服务器A47.109.191.115 (pactgo.cn) - SSL、nginx、网关服务
- ✅ 服务器B内网服务器 - SmartClaw服务、LMStudio、HeedDB
- ✅ Embedded-Redis多用户多设备状态管理
- ✅ WebSocket架构反向连接方案
- ✅ 编译状态:零警告通过
**核心功能全部实现**
- ✅ 多用户多设备:在线状态、设备路由、消息分发
- ✅ WebSocket通信长连接、心跳、重连
- ✅ 企业微信集成HTTPS回调、消息处理
- ✅ AI能力集成LMStudio调用、流式响应
- ✅ 数据存储HeedDB嵌入式、事务支持
### 🚀 立即可测试功能
1. **启动网关A**`cargo run --release`Embedded-Redis自动启动
2. **启动SmartClaw服务**`cargo run --release`连接网关A
3. **验证WebSocket连接**:检查连接状态和消息传输
4. **测试多用户多设备**:注册用户、绑定设备、发送消息
5. **企业微信集成测试**:配置回调地址、发送测试消息
6. **AI任务处理测试**:提交任务、查看处理结果
**系统已具备生产部署条件!**
### 🔧 技术架构
```
┌─────────────────────────────────────────────────────────────┐
│ SmartClaw服务 │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ WebSocket客户端模块 │ │
│ │ • 主动连接网关A (wss://pactgo.cn/ws/control) │ │
│ │ • 长连接保持 + 心跳检测 │ │
│ │ • 断线自动重连 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 内网Web管理接口 │ │
│ │ • 健康检查: GET /api/v1/health │ │
│ │ • 系统状态: GET /api/v1/system │ │
│ │ • 任务管理: POST /api/v1/task │ │
│ │ • WebSocket状态: GET /api/v1/websocket │ │
│ │ • LMStudio状态: GET /api/v1/lmstudio/status │ │
│ │ • 队列状态: GET /api/v1/queue/status │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ LMStudio API集成模块 │ │
│ │ • HTTP API调用 (http://127.0.0.1:1234) │ │
│ │ • 支持流式响应 (SSE) │ │
│ │ • 超时和重试机制 │ │
│ │ • 模型管理和切换 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ HeedDB数据存储模块 │ │
│ │ • 任务状态存储 │ │
│ │ • 用户会话管理 │ │
│ │ • 配置数据保存 │ │
│ │ • 审计日志记录 │ │
│ └─────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────┘
```
### ✅ 当前实现状态
**所有核心功能已实现**
- ✅ WebSocket客户端主动连接、长连接、心跳检测、重连机制
- ✅ 内网管理接口8个完整的管理和测试接口
- ✅ LMStudio集成HTTP API调用、流式响应、错误处理
- ✅ HeedDB存储嵌入式数据库、事务支持、零配置
- ✅ 优雅关闭:完整的生命周期管理
- ✅ 测试接口6个WebSocket通信测试接口
\*\*8. **Embedded-Redis多用户多设备核心功能**仅网关A启动
-**多用户在线状态**实时用户状态管理网关A管理
-**多设备路由表**user→device精确映射网关A管理
-**消息分发机制**保证不串线的消息路由网关A管理
-**消息队列**有序消息存储和分发网关A管理
-**消息确认**防丢失的确认机制网关A管理
-**重发机制**可靠的消息重发策略网关A管理
-**SmartClaw客户端连接**SmartClaw作为客户端连接网关A的Redis
1. **微信小程序官方原生技术栈**
-**WXML + WXSS + JavaScript**:官方原生技术栈
-**微信开发者工具**官方IDE完整API支持
-**原生小程序API**:无需第三方框架,直接调用
-**完整项目架构**pages、utils、components结构
-**核心功能实现**登录授权、WebSocket通信、任务提交
-**API接口封装**:统一请求封装,错误处理
-**小程序后台配置**:服务器域名、业务域名配置
### 🚀 下一步计划
1. **启动服务验证**在服务器B上启动SmartClaw服务
2. **连接测试**验证与服务器A的WebSocket连接
3. **功能测试**:测试所有内网管理接口
4. **集成测试**:验证完整的任务处理流程
5. **wechat_app开发**
- 下载微信开发者工具,注册小程序账号
- 创建原生wechat_app项目WXML+WXSS+JavaScript
- 实现用户登录、WebSocket通信、任务提交界面
- 配置服务器域名https://pactgo.cn和WebSocket域名wss://pactgo.cn
- 真机调试、体验版本测试、正式发布
1. **检查端口占用**`netstat -an | findstr 8000`
2. **检查nginx配置**确认反向代理设置正确添加了X-Location-Path头
3. **检查SSL证书**:确认证书文件存在且有效
4. **查看应用日志**:检查具体错误信息
5. **检查依赖项**确认所有DLL文件存在
6. **检查HTTPS配置**确认rustls-tls配置正确
**SmartClaw自动重连问题**
1. **检查配置文件**确认max_reconnect_attempts: 0
2. **查看重连日志**:检查重连尝试和错误信息
3. **检查网络稳定性**:确认网络连接稳定
4. **检查网关状态**:确认网关服务正常运行
5. **测试WebSocket连接**使用wscat测试连接
6. **检查重连逻辑**确认start_with_reconnect()方法正确实现
**企业微信消息解密失败**
1. **检查EncodingAESKey**:确认密钥正确且已补全=号
2. **检查Base64解码**确认使用了正确的解码方式URL_SAFE vs STANDARD
3. **检查IV提取**确认IV来自EncodingAESKey前16字节不是从密文提取
4. **检查AES填充**确认使用了PKCS7填充特别是在Windows 2012上
5. **检查签名验证**:确认使用了正确的签名拼接顺序
**SSL证书验证失败**
1. **检查证书有效性**确认SSL证书未过期且在有效期内
2. **检查证书链**:确认证书链完整,包含中间证书
3. **检查域名匹配**:确认证书域名与访问域名一致
4. **检查系统根证书**确认系统根证书已更新能够验证SSL证书
5. **检查rustls配置**确认使用了rustls-tls和webpki-roots支持系统根证书
6. **检查证书文件**:确认证书文件存在且格式正确
7. **测试证书**:使用`openssl s_client -connect pactgo.cn:443`测试证书
8. **检查防火墙**:确认防火墙未阻止证书验证相关的网络请求