feat(XCamera): 实现异步抓图功能并优化图像处理
fix(nginx): 调整企业微信回调代理路径 feat(gateway): 添加企业微信消息处理功能 docs: 更新项目规划文档和企业微信配置详情 refactor(XCamera): 重构LED检测和图像处理逻辑 test: 添加ONVIF抓图测试功能
This commit is contained in:
@@ -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`**
|
||||
|
||||
**服务器B(SmartClaw服务)**:
|
||||
|
||||
@@ -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日)- 核心功能实现完成 ✅
|
||||
|
||||
### ✅ 已完成的基础设施
|
||||
### ✅ 已完成的核心功能
|
||||
|
||||
**服务器A(47.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. **启动网关服务**(服务器A,Embedded-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.exe(Redis自动启动)
|
||||
```
|
||||
|
||||
### 🎯 架构分工明确
|
||||
|
||||
**网关A(47.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. 完整系统架构总结
|
||||
|
||||
### 🎯 系统架构分工
|
||||
|
||||
**网关A(47.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% | 高 |
|
||||
|
||||
### ✅ 当前实现状态
|
||||
|
||||
**基础设施完全就绪**:
|
||||
|
||||
- ✅ 服务器A:47.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. **检查防火墙**:确认防火墙未阻止证书验证相关的网络请求
|
||||
Reference in New Issue
Block a user