388 lines
21 KiB
Markdown
388 lines
21 KiB
Markdown
|
|
# 📋 项目结构分析报告
|
|||
|
|
|
|||
|
|
> **项目名称**: wechat_ipad_pro_1224
|
|||
|
|
> **模块名称**: `xiawan/wx`
|
|||
|
|
> **技术栈**: Go 1.21 + Gin + MySQL + Redis + Protobuf + Docker
|
|||
|
|
> **分析日期**: 2026-02-17
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 项目概述
|
|||
|
|
|
|||
|
|
本项目是一个 **微信 iPad Pro 协议服务端**,通过逆向微信 iPad 协议实现微信功能的 HTTP API 化。服务端基于 Go 语言开发,使用 Gin 框架暴露 RESTful API,支持多账号并发登录管理,提供完整的微信消息、联系人、群管理、朋友圈、支付等功能。
|
|||
|
|
|
|||
|
|
### 核心特性
|
|||
|
|
|
|||
|
|
- 🔐 MMTLS 加密通信(微信自定义 TLS 协议)
|
|||
|
|
- 📱 iPad Pro 设备模拟(支持 Mac/Car 转 iPad 模式)
|
|||
|
|
- 🔄 多账号并发管理(100 并发限制)
|
|||
|
|
- 📡 WebSocket + HTTP 轮询双模式消息同步
|
|||
|
|
- 🐳 Docker 容器化部署
|
|||
|
|
- 📖 Swagger API 文档
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 项目目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
wechat_ipad_pro_1224/
|
|||
|
|
├── main.go # 程序入口(初始化配置 → 数据库 → API 服务)
|
|||
|
|
├── go.mod # Go 模块定义 (xiawan/wx, go 1.21)
|
|||
|
|
├── go.sum # 依赖校验
|
|||
|
|
├── Dockerfile # 多阶段 Docker 构建(golang:1.21-alpine)
|
|||
|
|
├── docker-compose.yaml # 编排:wxserver + redis + mysql
|
|||
|
|
│
|
|||
|
|
├── api/ # 🌐 HTTP 接口层(Gin 框架)
|
|||
|
|
│ ├── apiSetup.go # API 启动入口 + 自动重连逻辑
|
|||
|
|
│ ├── controller/ # 控制器层(19 个文件)
|
|||
|
|
│ ├── service/ # API 业务服务层(23 个文件)
|
|||
|
|
│ ├── router/ # 路由注册(router.go)
|
|||
|
|
│ ├── req/ # 请求模型(9 个文件)
|
|||
|
|
│ ├── vo/ # 响应视图对象
|
|||
|
|
│ ├── middleware/ # 中间件(CORS 等)
|
|||
|
|
│ ├── swagger/ # Swagger 文档配置
|
|||
|
|
│ └── utils/ # API 工具函数
|
|||
|
|
│
|
|||
|
|
├── srv/ # ⚙️ 核心业务逻辑层
|
|||
|
|
│ ├── wxcore/ # 微信核心实现(14 个文件)
|
|||
|
|
│ ├── wxface/ # 接口抽象层(14 个接口定义)
|
|||
|
|
│ ├── wxrouter/ # 协议路由分发(25 个文件)
|
|||
|
|
│ ├── wxtask/ # 后台异步任务(9 个文件)
|
|||
|
|
│ ├── websrv/ # WebSocket 服务
|
|||
|
|
│ ├── srvconfig/ # 全局配置管理
|
|||
|
|
│ ├── defines/ # 常量定义
|
|||
|
|
│ ├── wxaccount.go # 账号管理
|
|||
|
|
│ └── wxfilemgr.go # 文件管理
|
|||
|
|
│
|
|||
|
|
├── clientsdk/ # 📦 微信协议 SDK
|
|||
|
|
│ ├── request.go # 核心请求封装(5148 行,173KB)
|
|||
|
|
│ ├── baserequest.go # 基础请求构建
|
|||
|
|
│ ├── protocol.go # 协议打包/解包
|
|||
|
|
│ ├── cdnprotocol.go # CDN 协议(图片/视频上传下载)
|
|||
|
|
│ ├── cdnrequest.go # CDN 请求
|
|||
|
|
│ ├── hybrid_request.go # 混合请求
|
|||
|
|
│ ├── oplogitem.go # 操作日志项
|
|||
|
|
│ ├── demo.go # 示例代码
|
|||
|
|
│ ├── mmtls/ # MMTLS 加密通信(11 个文件)
|
|||
|
|
│ ├── cecdh/ # ECDH 密钥交换(7 个文件)
|
|||
|
|
│ ├── baseinfo/ # 基础数据结构(14 个文件)
|
|||
|
|
│ ├── baseutils/ # 基础工具函数(8 个文件)
|
|||
|
|
│ ├── android/ # Android 设备信息(23 个文件)
|
|||
|
|
│ ├── extinfo/ # 扩展信息
|
|||
|
|
│ ├── ccdata/ # CC 数据
|
|||
|
|
│ ├── hybrid/ # 混合模式
|
|||
|
|
│ ├── proxynet/ # 代理网络
|
|||
|
|
│ └── xmltool/ # XML 工具
|
|||
|
|
│
|
|||
|
|
├── db/ # 💾 数据库层
|
|||
|
|
│ ├── mysql_db.go # MySQL 操作(48KB,核心 CRUD)
|
|||
|
|
│ ├── redisOperation.go # Redis 操作(18KB)
|
|||
|
|
│ ├── cache.go # 缓存管理
|
|||
|
|
│ ├── proxy.go # 代理管理
|
|||
|
|
│ ├── message_callback.go # 消息回调
|
|||
|
|
│ ├── callback_wrapper.go # 回调包装器
|
|||
|
|
│ └── table/ # 数据表模型定义
|
|||
|
|
│ ├── mysql_table.go # MySQL 表结构(ORM 模型)
|
|||
|
|
│ ├── redis_table.go # Redis 数据结构
|
|||
|
|
│ ├── proxy_mapping.go # 代理映射
|
|||
|
|
│ ├── messageCallback.go
|
|||
|
|
│ └── base.go
|
|||
|
|
│
|
|||
|
|
├── protobuf/ # 📝 Protobuf 协议定义
|
|||
|
|
│ ├── wechat/ # 微信 Protobuf 消息(27 个文件)
|
|||
|
|
│ ├── wechat_proto/ # 原始 Proto 定义(28 个文件)
|
|||
|
|
│ └── proto_ref/ # 协议参考
|
|||
|
|
│
|
|||
|
|
├── lib/ # 🔧 工具函数库(11 个文件)
|
|||
|
|
│ ├── BytesToInt.go # 字节转整数
|
|||
|
|
│ ├── IntToBytes.go # 整数转字节
|
|||
|
|
│ ├── MD5ToLower.go # MD5 小写
|
|||
|
|
│ ├── GetFileMD5Hash.go # 文件 MD5
|
|||
|
|
│ ├── Hex2Int.go # 十六进制转换
|
|||
|
|
│ ├── CreateDeviceId.go # 设备 ID 生成
|
|||
|
|
│ ├── Get62Data.go # 62 数据获取
|
|||
|
|
│ ├── Get62Key.go # 62 密钥获取
|
|||
|
|
│ ├── GetClientSeqId.go # 客户端序列号
|
|||
|
|
│ ├── RandString.go # 随机字符串
|
|||
|
|
│ └── ALLGather.go # 聚合工具
|
|||
|
|
│
|
|||
|
|
├── assets/ # 📁 配置和资源文件
|
|||
|
|
│ ├── setting.json # 主配置文件
|
|||
|
|
│ ├── setting.json.docker # Docker 环境配置
|
|||
|
|
│ ├── ca-cert # CA 证书
|
|||
|
|
│ └── sae.dat # SAE 数据文件
|
|||
|
|
│
|
|||
|
|
├── apns/ # 🔔 Apple 推送通知
|
|||
|
|
│ ├── Apns.go
|
|||
|
|
│ └── deviceToken.go
|
|||
|
|
│
|
|||
|
|
├── bin/ # 📦 预编译二进制
|
|||
|
|
│ ├── linux_amd64/
|
|||
|
|
│ └── windows_amd64/
|
|||
|
|
│
|
|||
|
|
└── static/ # 🌐 静态资源
|
|||
|
|
├── swagger/ # Swagger UI + API 文档
|
|||
|
|
├── templates/ # HTML 模板
|
|||
|
|
├── doc/ # 文档
|
|||
|
|
└── qrcode/ # 二维码
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 分层架构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────┐
|
|||
|
|
│ HTTP Client / WebSocket │
|
|||
|
|
├─────────────────────────────────────────────────────┤
|
|||
|
|
│ api/router 路由注册(13 个路由组,170+ 端点) │
|
|||
|
|
│ api/middleware 中间件(CORS、Recovery) │
|
|||
|
|
│ api/controller 控制器层(参数校验 → 调用 Service) │
|
|||
|
|
│ api/service API 服务层(业务编排 → 调用 srv 层) │
|
|||
|
|
│ api/req & vo 请求模型 / 响应视图对象 │
|
|||
|
|
├─────────────────────────────────────────────────────┤
|
|||
|
|
│ srv/wxcore 核心实现(连接管理、请求调用器) │
|
|||
|
|
│ srv/wxface 接口抽象(14 个 Interface 定义) │
|
|||
|
|
│ srv/wxrouter 协议路由(微信协议命令分发) │
|
|||
|
|
│ srv/wxtask 后台任务(好友、群消息、红包等) │
|
|||
|
|
│ srv/websrv WebSocket 服务(实时消息推送) │
|
|||
|
|
│ srv/srvconfig 全局配置管理 │
|
|||
|
|
├─────────────────────────────────────────────────────┤
|
|||
|
|
│ clientsdk/ 微信协议 SDK │
|
|||
|
|
│ ├── request 协议请求封装(登录/消息/联系人等) │
|
|||
|
|
│ ├── mmtls MMTLS 加密通信层 │
|
|||
|
|
│ ├── cecdh ECDH 密钥交换 │
|
|||
|
|
│ └── protocol 数据打包/解包 + CDN 协议 │
|
|||
|
|
├─────────────────────────────────────────────────────┤
|
|||
|
|
│ db/ 数据持久层 │
|
|||
|
|
│ ├── mysql_db MySQL(用户信息、设备、授权、日志) │
|
|||
|
|
│ ├── redis Redis(缓存、消息同步、代理) │
|
|||
|
|
│ └── table ORM 模型定义 │
|
|||
|
|
├─────────────────────────────────────────────────────┤
|
|||
|
|
│ protobuf/ 微信 Protobuf 消息协议定义 │
|
|||
|
|
└─────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. API 路由模块总览
|
|||
|
|
|
|||
|
|
API 基于 Gin 框架,共 **13 个路由分组**,端点暴露在配置的 `apiVersion` 路径下。
|
|||
|
|
|
|||
|
|
| 路由组 | 路径前缀 | 功能 | 端点数 |
|
|||
|
|
| ------------- | ------------ | ----------------------------------------- | ------ |
|
|||
|
|
| **admin** | `/admin` | 授权码管理、代理映射 | 7 |
|
|||
|
|
| **login** | `/login` | 二维码/设备/唤醒登录、验证码 | 9 |
|
|||
|
|
| **equipment** | `/equipment` | 设备管理、安全信息 | 4 |
|
|||
|
|
| **ws** | `/ws` | WebSocket 消息同步 | 1 |
|
|||
|
|
| **message** | `/message` | 消息收发(文本/图片/视频/语音/卡片/表情) | 26 |
|
|||
|
|
| **sns** | `/sns` | 朋友圈(发布/评论/点赞/时间线) | 17 |
|
|||
|
|
| **group** | `/group` | 群管理(创建/邀请/踢人/公告/管理员) | 19 |
|
|||
|
|
| **user** | `/user` | 用户信息修改(昵称/签名/头像/关键词回复) | 19 |
|
|||
|
|
| **applet** | `/applet` | 公众号/小程序(关注/授权/文章阅读) | 12 |
|
|||
|
|
| **other** | `/other` | 附近的人、步数、文件上传 | 7 |
|
|||
|
|
| **favor** | `/favor` | 收藏管理 | 4 |
|
|||
|
|
| **label** | `/label` | 标签管理 | 5 |
|
|||
|
|
| **friend** | `/friend` | 好友管理(通讯录/搜索/加好友/删除) | 11 |
|
|||
|
|
| **pay** | `/pay` | 微信支付(红包/转账/收款码) | 9 |
|
|||
|
|
| **finder** | `/finder` | 视频号(搜索/关注) | 4 |
|
|||
|
|
| **shop** | `/shop` | 微信小店(登录确认/扫码) | 4 |
|
|||
|
|
| **qy** | `/qy` | 企业微信(联系人/群管理) | 23 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 核心数据模型
|
|||
|
|
|
|||
|
|
### 5.1 MySQL 数据表
|
|||
|
|
|
|||
|
|
| 模型 | 说明 | 主键 |
|
|||
|
|
| ------------------ | ---------------------------------------------- | -------------------- |
|
|||
|
|
| `UserInfoEntity` | 用户信息(wxId、session、密钥、代理、状态等) | `wxId` |
|
|||
|
|
| `DeviceInfoEntity` | 设备信息(IMEI、设备ID、品牌、系统、运营商等) | `wxid` |
|
|||
|
|
| `LicenseKey` | 授权码(许可证、有效期、绑定微信号) | `id` (自增) |
|
|||
|
|
| `UserLoginLog` | 登录日志 | `id` (自增) |
|
|||
|
|
| `UserBusinessLog` | 业务行为日志 | `id` (自增) |
|
|||
|
|
| `UserMessageLog` | 消息去重日志 | `user_name` |
|
|||
|
|
| `Command` | 指令配置(自动回复、欢迎语、踢人关键词等) | `uuid` |
|
|||
|
|
| `ModContactDB` | 联系人变更记录 | `user_uuid_combined` |
|
|||
|
|
| `AddMsgDB` | 消息记录 | `msg_uuid_combined` |
|
|||
|
|
| `BlackList` | 黑名单 | `id` |
|
|||
|
|
| `CdnSnsImageInfo` | CDN 朋友圈图片信息 | `ImageMD5` |
|
|||
|
|
|
|||
|
|
### 5.2 Redis 数据结构
|
|||
|
|
|
|||
|
|
- 消息同步队列(`_syncMsg`、`_syncHttp`、`_wx_sync_msg_topic`)
|
|||
|
|
- 代理信息缓存(`wechat:Proxy:{UUID}`)
|
|||
|
|
- 登录状态缓存
|
|||
|
|
- 消息去重缓存
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. 核心组件说明
|
|||
|
|
|
|||
|
|
### 6.1 wxcore - 微信核心实现
|
|||
|
|
|
|||
|
|
| 文件 | 大小 | 功能 |
|
|||
|
|
| -------------------- | ----- | --------------------------------------------------- |
|
|||
|
|
| `wxreqinvoker.go` | 222KB | **请求调用器**(199 个方法,覆盖所有微信 API 操作) |
|
|||
|
|
| `wxconnect.go` | 38KB | 微信连接管理(长链接/短链接) |
|
|||
|
|
| `wxcache.go` | 12KB | 连接缓存 |
|
|||
|
|
| `wxconnectmgr.go` | 6KB | 连接池管理 |
|
|||
|
|
| `wxfilehelpermgr.go` | 4KB | 文件辅助管理 |
|
|||
|
|
| `wxusermsgmgr.go` | 3KB | 用户消息管理 |
|
|||
|
|
| `wxmsghandler.go` | 3KB | 消息处理器 |
|
|||
|
|
| `wxtaskmgr.go` | 2KB | 任务管理 |
|
|||
|
|
| `wxsyncmgr.go` | 2KB | 消息同步管理 |
|
|||
|
|
| `wxserver.go` | 2KB | 服务器实例 |
|
|||
|
|
|
|||
|
|
### 6.2 clientsdk - 协议 SDK
|
|||
|
|
|
|||
|
|
| 文件 | 大小 | 功能 |
|
|||
|
|
| ------------------- | ----- | -------------------------------------------------------------- |
|
|||
|
|
| `request.go` | 173KB | **核心请求封装**(146 个函数:登录、消息、联系人、群、支付等) |
|
|||
|
|
| `cdnprotocol.go` | 47KB | CDN 协议(图片/视频上传下载) |
|
|||
|
|
| `cdnrequest.go` | 39KB | CDN 请求实现 |
|
|||
|
|
| `baserequest.go` | 29KB | 基础请求构建(Protobuf 序列化) |
|
|||
|
|
| `protocol.go` | 28KB | 协议打包/解包 |
|
|||
|
|
| `demo.go` | 18KB | 示例代码 |
|
|||
|
|
| `oplogitem.go` | 15KB | 操作日志 |
|
|||
|
|
| `hybrid_request.go` | 14KB | 混合请求 |
|
|||
|
|
|
|||
|
|
### 6.3 wxface - 接口抽象层
|
|||
|
|
|
|||
|
|
定义了 14 个接口,实现了面向接口编程的架构:
|
|||
|
|
|
|||
|
|
| 接口 | 说明 |
|
|||
|
|
| ------------------ | -------------------------------- |
|
|||
|
|
| `IWXReqInvoker` | 请求调用器接口(18KB,核心接口) |
|
|||
|
|
| `IWXConnect` | 微信连接接口 |
|
|||
|
|
| `IWXConnectMgr` | 连接管理器接口 |
|
|||
|
|
| `IWXCache` | 缓存接口 |
|
|||
|
|
| `IWXMsgHandler` | 消息处理接口 |
|
|||
|
|
| `IWXRouter` | 路由接口 |
|
|||
|
|
| `IWXServer` | 服务器接口 |
|
|||
|
|
| `IWXSyncMgr` | 同步管理接口 |
|
|||
|
|
| `IWXTaskMgr` | 任务管理接口 |
|
|||
|
|
| `IWXUserMsgMgr` | 用户消息管理接口 |
|
|||
|
|
| `IWXFileHelperMgr` | 文件助手接口 |
|
|||
|
|
| `IWXGrabHBMgr` | 抢红包管理接口 |
|
|||
|
|
| `IWXLongRequest` | 长请求接口 |
|
|||
|
|
| `IWXResponse` | 响应接口 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. 配置系统
|
|||
|
|
|
|||
|
|
配置文件位于 `assets/setting.json`,主要配置项:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"debug": false, // 调试模式
|
|||
|
|
"host": "0.0.0.0", // 监听地址
|
|||
|
|
"port": "7006", // 监听端口
|
|||
|
|
"apiVersion": "", // API 版本路径前缀
|
|||
|
|
"adminKey": "xxx", // 管理接口授权密钥
|
|||
|
|
"mac2ipad": true, // Mac 转 iPad 模式
|
|||
|
|
"version": "1.0.1", // 版本号
|
|||
|
|
"workerpoolsize": 500, // 工作线程池大小
|
|||
|
|
"maxworkertasklen": 1000, // 最大任务队列长度
|
|||
|
|
"redisConfig": { ... }, // Redis 连接配置
|
|||
|
|
"mySqlConnectStr": "...", // MySQL 连接字符串
|
|||
|
|
"disabledCmdList": [...], // 禁用的命令列表
|
|||
|
|
"dt": true // 设备令牌验证
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. 部署方案
|
|||
|
|
|
|||
|
|
### Docker Compose 架构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌──────────────────────────────────────────┐
|
|||
|
|
│ Docker Network: wx_network │
|
|||
|
|
│ │
|
|||
|
|
│ ┌──────────┐ ┌────────┐ ┌──────────┐ │
|
|||
|
|
│ │ wxserver │→ │ redis │ │ mysql │ │
|
|||
|
|
│ │ Port:5253 │ │ (AOF) │ │ 8.0 │ │
|
|||
|
|
│ │ Go 1.21 │ │ │ │ utf8mb4 │ │
|
|||
|
|
│ └──────────┘ └────────┘ └──────────┘ │
|
|||
|
|
└──────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- **wxserver**: Go 编译的二进制,多阶段构建(alpine),端口 5253
|
|||
|
|
- **Redis**: 持久化 AOF 模式,无外部端口暴露
|
|||
|
|
- **MySQL 8.0**: utf8mb4 字符集,无外部端口暴露
|
|||
|
|
- **数据卷**: `assets/`、`static/`、`logs/`、`redis_data/`、`mysql_data/`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. 依赖库概览
|
|||
|
|
|
|||
|
|
| 依赖 | 版本 | 用途 |
|
|||
|
|
| --------------------- | ------- | --------------------- |
|
|||
|
|
| `gin-gonic/gin` | v1.6.3 | HTTP 框架 |
|
|||
|
|
| `jinzhu/gorm` | v1.9.11 | ORM |
|
|||
|
|
| `gomodule/redigo` | v2.0.0 | Redis 客户端 |
|
|||
|
|
| `go-sql-driver/mysql` | v1.8.1 | MySQL 驱动 |
|
|||
|
|
| `gorilla/websocket` | v1.4.1 | WebSocket |
|
|||
|
|
| `gogo/protobuf` | v1.2.2 | Protobuf 序列化 |
|
|||
|
|
| `golang/protobuf` | v1.3.3 | Protobuf 工具 |
|
|||
|
|
| `micro/go-micro` | v1.18.0 | 微服务框架 |
|
|||
|
|
| `wsddn/go-ecdh` | - | ECDH 密钥交换 |
|
|||
|
|
| `golang.org/x/crypto` | v0.28.0 | 加密扩展库 |
|
|||
|
|
| `boombuler/barcode` | v1.0.0 | 条码/二维码生成 |
|
|||
|
|
| `nfnt/resize` | - | 图片缩放 |
|
|||
|
|
| `techoner/gophp` | v0.2.0 | PHP 序列化兼容 |
|
|||
|
|
| `sirupsen/logrus` | v1.4.2 | 结构化日志 |
|
|||
|
|
| `gogf/gf` | v1.12.3 | GoFrame(Redis 配置) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 10. 安全与授权机制
|
|||
|
|
|
|||
|
|
1. **授权码系统**: `LicenseKey` 模型管理设备授权,支持按时长(日/周/月/季/半年/年/永久)
|
|||
|
|
2. **AdminKey 认证**: 管理接口通过 `adminKey` 进行身份验证
|
|||
|
|
3. **程序时效**: `main.go` 中硬编码了过期日期检查(2030-08-17),过期后程序自动退出
|
|||
|
|
4. **MMTLS 加密**: 所有微信通信使用 MMTLS(微信自定义 TLS)加密
|
|||
|
|
5. **ECDH 密钥交换**: 登录过程使用 ECDH 进行密钥协商
|
|||
|
|
6. **代理支持**: 支持 SOCKS5 代理,每个账号可独立配置代理
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 11. 代码量统计
|
|||
|
|
|
|||
|
|
| 模块 | 文件数 | 主要大文件 |
|
|||
|
|
| ------------ | --------- | ---------------------------------------------------- |
|
|||
|
|
| `api/` | ~63 | `loginService.go` (63KB), `messageService.go` (43KB) |
|
|||
|
|
| `srv/` | ~70 | `wxreqinvoker.go` (222KB), `wxnewsync.go` (51KB) |
|
|||
|
|
| `clientsdk/` | ~90 | `request.go` (173KB), `cdnprotocol.go` (47KB) |
|
|||
|
|
| `db/` | ~11 | `mysql_db.go` (48KB), `redisOperation.go` (18KB) |
|
|||
|
|
| `protobuf/` | ~57 | Protobuf 生成代码 |
|
|||
|
|
| `lib/` | 11 | 工具函数 |
|
|||
|
|
| **总计** | **~300+** | |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 12. 启动流程
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
main()
|
|||
|
|
├── 过期检查 (2030-08-17)
|
|||
|
|
├── srvconfig.ConfigSetUp() # 读取 assets/setting.json
|
|||
|
|
├── db.InitDB() # 初始化 MySQL + 自动建表
|
|||
|
|
├── go db.StartCleanupTask() # 启动定时清理任务
|
|||
|
|
├── db.RedisSetup() # 初始化 Redis 连接池
|
|||
|
|
└── api.WXServerGinHttpApiStart() # 启动 HTTP 服务
|
|||
|
|
├── TLog() # 初始化日志
|
|||
|
|
├── service.InitWXServerRouter() # 初始化微信协议路由
|
|||
|
|
├── go InitAnewLogin() # 恢复已登录账号连接
|
|||
|
|
│ ├── 清理缓存
|
|||
|
|
│ ├── 查询所有用户信息
|
|||
|
|
│ ├── 并发初始化已登录用户(100 并发限制)
|
|||
|
|
│ └── 启动定期清理未登录连接(每 5 分钟)
|
|||
|
|
├── router.SetUpRouter() # 注册 Gin 路由 + Swagger
|
|||
|
|
└── app.Run() # 启动 Gin HTTP 服务器
|
|||
|
|
```
|