Skip to content

Commit 8c84108

Browse files
committed
Create CLAUDE.md file for Claude Code guidance
1 parent 47f3c7f commit 8c84108

1 file changed

Lines changed: 241 additions & 1 deletion

File tree

CLAUDE.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

CLAUDE.md

Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
```
2+
# CLAUDE.md
3+
4+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
5+
```
6+
7+
# Candy 项目开发指南
8+
9+
## 项目概述
10+
11+
Candy 是一个用 Rust 编写的现代、轻量级 Web 服务器(版本 0.2.5)。它提供了静态文件服务、反向代理、负载均衡、Lua 脚本支持等功能,是一个高性能且易于配置的服务器解决方案。
12+
13+
## 核心功能
14+
15+
- 静态文件服务,支持目录列表
16+
- 反向代理,支持负载均衡(轮询、加权轮询、IP 哈希、最少连接)
17+
- Lua 脚本支持(可选功能)
18+
- SSL/TLS 加密(HTTPS),支持 HTTP/2
19+
- 配置文件变更自动重载(带防抖机制)
20+
- 多虚拟主机支持
21+
- 正向代理支持
22+
- HTTP 重定向处理
23+
- 自定义错误页面
24+
- 健康检查功能(主动和被动)
25+
- 详细的调试日志和监控
26+
27+
## 技术栈
28+
29+
- **Web 框架**: Axum(异步、高性能)
30+
- **服务器**: Axum Server(HTTP/1.1 + HTTP/2)
31+
- **异步运行时**: Tokio
32+
- **日志**: Tracing(含文件日志和控制台输出)
33+
- **配置**: Serde + TOML(带验证和自动重载)
34+
- **压缩**: Axum 压缩中间件(gzip、deflate、brotli、zstd)
35+
- **Lua 支持**: Mlua(可选,Lua 5.4)
36+
- **配置监听**: Notify 库(带防抖机制)
37+
- **数据结构**: DashMap(并发安全哈希表)
38+
- **HTTP 客户端**: Reqwest(支持 HTTP/2 和多种压缩格式)
39+
40+
## 常用命令
41+
42+
### 构建和运行
43+
44+
```bash
45+
# 调试构建
46+
make build
47+
make run
48+
49+
# 发布构建
50+
make release
51+
52+
# 开发模式(自动重载)
53+
make dev # 使用 cargo watch 自动重载
54+
55+
# 运行服务器
56+
candy # 使用默认配置文件(config.toml)
57+
candy -c /path/to/config.toml # 使用指定配置文件
58+
candy --help # 查看帮助信息
59+
```
60+
61+
### 代码质量和测试
62+
63+
```bash
64+
# 格式化代码
65+
make format # 使用 rustfmt 格式化
66+
cargo fmt # 直接使用 cargo
67+
68+
# 运行 Clippy 检查
69+
make lint # 运行 Clippy 检查
70+
cargo clippy # 直接使用 cargo
71+
72+
# 自动修复 lint 问题并格式化
73+
make fix
74+
75+
# 运行测试
76+
make test # 运行所有测试(单线程)
77+
cargo test # 直接使用 cargo
78+
cargo test -- --test-threads=1 # 单线程测试(避免资源竞争)
79+
80+
# 检查编译错误
81+
make check
82+
cargo check
83+
84+
# 运行单个测试
85+
cargo test <test_name> -- --test-threads=1
86+
```
87+
88+
## 项目架构
89+
90+
### 核心模块
91+
92+
```
93+
/Users/xfy/Developer/candy/src/
94+
├── main.rs # 入口点,服务器生命周期管理
95+
├── cli.rs # 命令行参数解析
96+
├── config.rs # 配置加载、验证和结构体定义
97+
├── consts.rs # 常量定义
98+
├── error.rs # 自定义错误类型
99+
├── http/ # HTTP 相关模块
100+
│ ├── mod.rs # 服务器创建和路由注册
101+
│ ├── serve.rs # 静态文件服务
102+
│ ├── reverse_proxy.rs # 反向代理实现(含负载均衡)
103+
│ ├── forward_proxy.rs # 正向代理实现
104+
│ ├── redirect.rs # 重定向处理
105+
│ └── lua.rs # Lua 脚本集成(可选)
106+
├── lua_engine.rs # Lua 引擎初始化(可选特性)
107+
├── middlewares/ # Axum 中间件实现
108+
└── utils/ # 工具模块
109+
├── mod.rs # 工具模块入口
110+
├── config_watcher.rs # 配置文件监听(自动重载)
111+
├── logging.rs # 日志初始化
112+
└── service.rs # 服务工具
113+
```
114+
115+
### 关键架构特点
116+
117+
1. **异步架构**: 基于 Tokio 异步运行时和 Axum 框架
118+
2. **并发安全**: 使用 DashMap 实现高性能并发数据结构
119+
3. **模块化设计**: 清晰的模块划分,各功能独立实现
120+
4. **配置驱动**: 完整的配置验证和自动重载机制
121+
5. **可扩展性**: 支持可选特性(如 Lua 脚本)通过 Cargo features 实现
122+
123+
## 配置文件
124+
125+
### 主配置文件结构
126+
127+
默认配置文件路径:`config.toml`
128+
129+
```toml
130+
log_level = "info"
131+
log_folder = "./logs"
132+
133+
# 上游服务器组(用于负载均衡)
134+
[[upstream]]
135+
name = "test_backend"
136+
server = [
137+
{ server = "192.168.1.100:8080" },
138+
{ server = "192.168.1.101:8080", weight = 2 }
139+
]
140+
method = "weighted_round_robin" # 负载均衡方法:round_robin/weighted_round_robin/ip_hash/least_conn
141+
142+
# 虚拟主机配置
143+
[[host]]
144+
ip = "0.0.0.0"
145+
port = 8080
146+
ssl = false
147+
timeout = 30
148+
149+
# 路由配置
150+
[[host.route]]
151+
location = "/"
152+
root = "./html"
153+
index = ["index.html", "index.htm"]
154+
auto_index = true
155+
156+
[[host.route]]
157+
location = "/api"
158+
upstream = "test_backend"
159+
proxy_timeout = 10
160+
max_body_size = 1048576
161+
```
162+
163+
### 负载均衡算法
164+
165+
- **RoundRobin**: 简单轮询(默认)
166+
- **WeightedRoundRobin**: 加权轮询,支持服务器权重配置
167+
- **IpHash**: IP 哈希算法,实现会话保持
168+
- **LeastConn**: 最少连接数算法,动态分配请求到连接数最少的服务器
169+
170+
## 开发流程
171+
172+
### 调试
173+
174+
- 使用 `RUST_BACKTRACE=full` 环境变量获取完整堆栈跟踪
175+
- 使用 `log_level = "trace"` 在配置文件中启用详细日志
176+
- 使用 `cargo run -- --help` 查看命令行选项
177+
178+
### 添加新功能
179+
180+
1. 确定功能所属模块或创建新模块
181+
2. 实现功能逻辑
182+
3. 更新配置结构(如有需要)
183+
4. 更新路由注册(src/http/mod.rs)
184+
5. 编写测试
185+
6. 运行 `make lint``make test`
186+
7. 提交代码
187+
188+
### 修改配置
189+
190+
- 编辑 `config.toml` 文件
191+
- 服务器会自动检测变化并重启
192+
- 确保配置结构与 `src/config.rs` 中的定义匹配
193+
194+
## 监控与维护
195+
196+
### 日志
197+
198+
- 默认日志目录:`./logs/`
199+
- 日志文件格式:`candy-[日期].log`
200+
- 使用 `tail -f logs/candy-[日期].log` 实时查看日志
201+
202+
### 常见问题
203+
204+
1. **配置验证失败**:检查配置文件格式和值是否符合要求
205+
2. **端口占用**:使用 `lsof -i :端口号` 查找占用进程
206+
3. **SSL 证书问题**:确保证书和密钥文件路径正确,权限合适
207+
4. **性能问题**:检查上游服务器响应时间,优化负载均衡配置
208+
209+
## 性能优化
210+
211+
### 已实现的优化
212+
213+
- 使用 MiMalloc 内存分配器替代默认分配器
214+
- 启用 HTTP/2 支持
215+
- 实现请求和响应压缩
216+
- 优化连接池管理
217+
- 使用并发安全数据结构
218+
219+
### 构建优化
220+
221+
发布构建配置(Cargo.toml):
222+
- `opt-level = 3`:最高优化级别
223+
- `strip = true`:移除调试符号
224+
- `lto = true`:启用链接时优化
225+
- `codegen-units = 1`:允许更好的优化
226+
227+
## 测试覆盖
228+
229+
项目包含全面的单元测试,覆盖:
230+
- 配置验证
231+
- 服务器启动和关闭
232+
- 静态文件服务
233+
- 反向代理和负载均衡
234+
- 健康检查
235+
- 配置文件监听和重载
236+
- 路由匹配
237+
238+
运行所有测试:
239+
```bash
240+
make test
241+
```

0 commit comments

Comments
 (0)