8.7 KiB
8.7 KiB
变更日志
本文档记录rhttpd项目的所有重要变更。
格式基于 Keep a Changelog, 并且本项目遵循 语义化版本。
[未发布]
计划中
- 负载均衡与反向代理集成
- 健康检查自动化
- 连接池统计API
- 完整SSL/TLS支持
- 完整JavaScript运行时集成
[0.2.1] - 2026-01-17
新增
- 🌊 完整TCP代理实现
- 原始TCP流量双向转发
- 协议自动检测(通过HTTP Upgrade头)
- 连接统计和管理
- 错误处理和日志记录
- 🔄 完整WebSocket代理实现
- WebSocket握手转发
- WebSocket消息双向转发
- 协议识别
- 连接生命周期管理
- 🔌 CONNECT方法支持
- HTTP隧道处理
- 与服务器模块集成
- 自动目标地址解析
变更
- TCP代理模块从87行扩展到410行
- 服务器模块从273行增加到364行
- 新增TCP代理集成测试
API增强
TcpProxyManager::handle_tcp_proxy- 完整的TCP/WebSocket代理处理TcpProxyManager::detect_protocol- 自动协议检测TcpProxyManager::handle_raw_tcp- 原始TCP转发TcpProxyManager::handle_websocket- WebSocket转发handle_connect_request- HTTP隧道处理
测试覆盖
- 新增TCP代理测试 (1个测试)
- 新增连接管理统计测试 (1个测试)
- 总测试数从7个增加到9个
- 所有测试通过
技术细节
- 使用
tokio::io::copy_bidirectional实现高效双向转发 - 使用
TcpStream::peek实现非阻塞协议检测 - 异步任务管理确保连接生命周期正确
- 完善的错误处理和日志记录
文档更新
- PROGRESS.md - 更新进度到v0.2.1
- doc/status.md - 更新状态汇总
- CHANGELOG.md - 版本变更记录
[0.2.0] - 2025-01-15
新增
- 🌊 TCP代理支持
- 原始TCP流量转发
- WebSocket协议代理框架
- 协议检测和路由
- 🔄 连接池管理
- HTTP连接复用
- 连接保活机制
- 连接数限制
- 空闲连接清理
- ⚖️ 负载均衡
- 轮询 (Round Robin) 算法
- 最少连接 (Least Connections) 算法
- 加权轮询 (Weighted Round Robin) 算法
- IP哈希 (IP Hash) 算法
- 随机选择 (Random) 算法
- 🏥 健康检查机制
- HTTP健康检查端点
- TCP连接健康检查
- 后端服务状态监控
- 故障检测和恢复
- 响应时间统计
- 🛠️ 配置增强
- 连接池配置选项
- 健康检查配置选项
- 多种负载均衡策略配置
变更
新增模块
proxy/tcp_proxy.rs- TCP和WebSocket代理实现proxy/connection_pool.rs- HTTP连接池管理proxy/load_balancer.rs- 负载均衡策略实现proxy/health_check.rs- 健康检查系统
配置增强
# 新增连接池配置
[connection_pool]
max_connections = 100
idle_timeout = 90 # 秒
# 新增健康检查配置
[health_check]
interval = 30 # 秒
timeout = 5 # 秒
path = "/health"
expected_status = 200
# 增强的负载均衡配置
[[sites."example.com".routes]]
type = "reverse_proxy"
path_pattern = "/api/*"
target = "http://backend:3000"
[sites."example.com".routes.load_balancer]
strategy = "round_robin" # round_robin, least_connections, weighted_round_robin, ip_hash, random
upstreams = ["http://backend1:3000", "http://backend2:3000"]
weights = [1, 2] # 可选的权重配置
API增强
ConnectionPool- HTTP连接池管理LoadBalancer- 负载均衡器HealthChecker- 健康检查器TcpProxyManager- TCP代理管理器
测试覆盖
- 新增连接池测试 (1个测试)
- 新增负载均衡测试 (1个测试)
- 现有测试7个全部通过
技术细节
新增依赖
tokio-tungstenite- WebSocket支持base64- WebSocket握手支持sha1- WebSocket认证支持rand- 负载均衡随机选择
性能优化
- 连接池减少连接建立开销
- 负载均衡提高后端利用率
- 健康检查快速故障转移
- 异步架构保证高并发性能
安全增强
- 连接数限制防止资源耗尽
- 超时机制防止连接堆积
- 健康检查确保服务可用性
文档更新
- README.md - 新增v0.2.0功能介绍
- AGENTS.md - 更新开发指南
- roadmap.md - 新增详细实现计划
- CHANGELOG.md - 版本变更记录
配置示例
TCP代理配置
[[sites."ws.example.com".routes]]
type = "tcp_proxy"
path_pattern = "/ws/*"
target = "ws://websocket-server:8080"
protocol = "websocket" # tcp, websocket, http
负载均衡配置
[[sites."api.example.com".routes]]
type = "reverse_proxy"
path_pattern = "/api/*"
target = "http://primary-backend"
[sites."api.example.com".routes.load_balancer]
strategy = "least_connections"
upstreams = [
"http://backend1:3000",
"http://backend2:3000",
"http://backend3:3000"
]
weights = [3, 2, 1] # 权重配置
健康检查配置
[health_check]
interval = 30 # 检查间隔(秒)
timeout = 5 # 超时时间(秒)
path = "/health" # 健康检查路径
expected_status = 200 # 期望的状态码
[0.1.0] - 2025-01-15
新增
- 🏗️ 基础HTTP服务器框架
- 基于axum的异步服务器
- 支持多站点托管
- 基于Host头的路由
- 📁 静态文件服务
- 自动MIME类型检测
- 索引文件支持
- 目录访问控制
- 🔀 反向代理
- HTTP请求转发
- 头部重写和传递
- 请求/响应体转发
- ⚙️ 配置系统
- TOML格式支持
- JSON格式支持
- 配置验证机制
- 🧙 JavaScript配置基础
- JS配置文件解析 (简化版)
- 与TOML/JSON配置集成
技术细节
依赖
tokio- 异步运行时axum- HTTP框架hyper- HTTP实现reqwest- HTTP客户端serde- 序列化/反序列化toml- TOML解析mime_guess- MIME类型检测tower-http- HTTP服务工具tracing- 日志记录
项目结构
rhttpd/
├── src/
│ ├── main.rs # 应用程序入口
│ ├── lib.rs # 库根
│ ├── config/ # 配置管理
│ ├── server/ # 服务器实现
│ ├── proxy/ # 代理功能
│ └── js_engine/ # JavaScript集成
├── tests/ # 集成测试
├── doc/ # 文档和需求
├── public/ # 静态文件示例
├── static/ # 静态文件示例
├── config.toml # TOML配置示例
├── config.js # JavaScript配置示例
├── README.md # 项目文档
├── AGENTS.md # 开发者指南
├── roadmap.md # 开发路线图
└── CHANGELOG.md # 变更日志
测试结果
- ✅ 3个单元测试通过
- ✅ 2个集成测试通过
- ✅ 所有代码符合clippy规范
- ✅ 项目可正常构建和运行
配置示例
基本配置
port = 8080
[sites."example.com"]
hostname = "example.com"
[[sites."example.com".routes]]
type = "static"
path_pattern = "/*"
root = "./public"
index = ["index.html"]
[[sites."example.com".routes]]
type = "reverse_proxy"
path_pattern = "/api/*"
target = "http://localhost:3000"
JavaScript配置示例
export default {
port: 8080,
sites: {
"api.example.com": {
hostname: "api.example.com",
routes: [
{
type: "reverse_proxy",
path_pattern: "/v1/*",
target: "http://localhost:3001",
rewrite: {
"^/v1": "/api/v1"
}
}
]
},
"static.example.com": {
hostname: "static.example.com",
routes: [
{
type: "static",
path_pattern: "/*",
root: "./static",
index: ["index.html"]
}
]
}
},
// JavaScript中间件示例
middleware: async function(req) {
console.log(`Request: ${req.method} ${req.url}`);
return null; // 返回null继续处理,或返回Response直接响应
}
};
使用示例
启动服务器
# 使用默认配置
cargo run
# 使用指定配置文件
cargo run -- config.toml
# 使用JavaScript配置
cargo run -- config.js
测试
# 运行所有测试
cargo test
# 运行单个测试
cargo test test_name
# 代码检查
cargo clippy
# 代码格式化
cargo fmt
# 文档生成
cargo doc --open
版本说明
版本号规则
- 主版本号: 不兼容的API修改
- 次版本号: 向下兼容的功能性新增
- 修订号: 向下兼容的问题修正
发布周期
- 主版本: 根据需要发布
- 次版本: 每季度发布
- 修订版: 根据需要发布
分支策略
- main: 稳定版本
- develop: 开发版本
- feature/*: 功能分支
最后更新: 2026年1月17日