Files
clawgo/docs/optimization/02-gateway-structure-split.md
2026-05-10 17:27:06 +08:00

115 lines
2.5 KiB
Markdown

# 02 Gateway 结构拆分
## 背景
`cmd/cmd_gateway.go` 当前同时承担 gateway 命令解析、服务注册、runtime 组装、热重载、API handler 注入、channel 生命周期、cron/heartbeat/sentinel 编排、bootstrap 初始化等职责。文件过大,后续修改容易产生回归。
## 目标
在不改变行为的前提下拆分 Gateway 代码结构,让每类职责有清晰文件边界。
## 建议改动范围
主要文件:
- `cmd/cmd_gateway.go`
- 新增 `cmd/gateway_runtime.go`
- 新增 `cmd/gateway_reload.go`
- 新增 `cmd/gateway_services.go`
- 新增 `cmd/gateway_bootstrap.go`
可选文件:
- `cmd/reload_windows.go`
- `cmd/reload_unix.go`
- `cmd/signals_windows.go`
- `cmd/signals_unix.go`
尽量避免修改:
- `pkg/api/server.go`
- `pkg/agent/*`
- `pkg/providers/*`
- `pkg/channels/*`
## 建议拆分
### `cmd/cmd_gateway.go`
保留命令入口和高层流程:
- 参数分发。
- `gateway run/start/stop/restart/status` 分支。
- 前台 run 的主流程骨架。
### `cmd/gateway_runtime.go`
放运行时组装:
- `buildGatewayRuntime`
- `bindAgentLoopHandlers`
- `configureCronServiceRuntime`
- `buildHeartbeatService`
- `dispatchCronJob`
- `normalizeCronTargetChatID`
### `cmd/gateway_reload.go`
放热重载:
- config fingerprint。
- config watcher。
- reload trigger。
- runtimeSame 判断。
- reload 后重新绑定 API handler、channel、sentinel。
### `cmd/gateway_services.go`
放系统服务注册/控制:
- Linux systemd。
- macOS launchd。
- Windows scheduled task。
- PID file stop。
### `cmd/gateway_bootstrap.go`
放启动辅助任务:
- startup compaction check。
- bootstrap init。
- maximum permission policy。
## 验收标准
- 行为不变,命令仍可用:
```bash
go run ./cmd gateway run --config ./config.json
go run ./cmd gateway status --config ./config.json
```
- `go test ./...` 通过。
- `cmd/cmd_gateway.go` 明显变薄,职责聚焦于命令入口。
- 新文件命名和函数归属清晰。
- 没有引入循环依赖或跨 package 重构。
## 测试建议
```bash
go test ./cmd ./pkg/api ./pkg/channels ./pkg/agent
go test ./...
```
如果有本地配置,可额外手动验证:
```bash
go run ./cmd gateway run --config ./config.json
```
启动后修改配置文件,观察热重载日志是否仍正常。
## 并行注意
本任务应避免改 API 路由和 Provider 行为。若 API 文档任务并行进行,它只读 `pkg/api/server.go`,双方冲突较小。