You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

180 lines
4.8 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
alwaysApply: true
---
# nnet 网络库开发规则
本文档定义了 nnet 网络库的开发规则和知识库关联。
## 知识库关联
使用 `@file` 指令关联知识库文档:
### 设计文档
@file docs/kb/design/ARCHITECTURE.md
@file docs/kb/design/DESIGN.md
### 需求文档
@file docs/kb/requirements/REQUIREMENTS.md
### 开发文档
@file docs/kb/development/CODE_STRUCTURE.md
@file docs/kb/development/IMPLEMENTATION.md
### 测试文档
@file docs/kb/testing/TEST_COVERAGE.md
### 状态文档
@file docs/kb/status/PROJECT_STATUS.md
### 用户指南
@file docs/kb/user-guide/ROUTER_EXAMPLES.md
@file docs/kb/user-guide/PROTOCOL_FRAME_EXPLANATION.md
## 项目概述
nnet 是一个基于 golang 1.25.4 和 gnet 2.9.5 实现的高性能、功能完备的网络库。
### 核心特性
- 多协议支持TCP、UDP、WebSocket、Unix Domain Socket、TLS、串口等
- 现代化的路由系统:支持字符串匹配、帧头匹配、帧数据匹配
- 灵活的中间件系统:全局中间件、路由级中间件
- 协议版本管理:支持单协议多版本,灵活的版本识别策略
- 连接管理:连接分组、跨连接操作
- Session管理支持内存、文件、Redis等存储策略
- 内置客户端支持TCP、UDP、WebSocket等协议
- 插件系统:可扩展的插件架构
- 指标监控Prometheus格式的Metrics
- 健康检查:内置健康检查接口
## 代码组织
### 目录结构
```
nnet/
├── cmd/ # 命令行工具和示例
├── internal/ # 内部实现(不对外暴露)
│ ├── server/ # 服务器核心
│ ├── protocol/ # 协议实现
│ ├── router/ # 路由实现
│ ├── middleware/ # 中间件实现
│ ├── interceptor/ # 拦截器实现
│ ├── connection/ # 连接管理
│ ├── session/ # Session管理
│ ├── codec/ # 编解码器
│ ├── unpacker/ # 粘包拆包
│ └── client/ # 客户端实现
├── pkg/ # 对外暴露的包
│ ├── nnet/ # 主包(入口)
│ ├── protocol/ # 协议接口
│ ├── router/ # 路由接口
│ ├── middleware/ # 中间件接口
│ ├── interceptor/ # 拦截器接口
│ ├── connection/ # 连接接口
│ ├── session/ # Session接口
│ └── codec/ # 编解码接口
├── examples/ # 示例代码
├── test/ # 测试代码
└── docs/ # 文档
└── kb/ # 知识库
```
### 设计原则
1. **接口驱动设计**:核心功能通过接口定义,便于扩展和测试
2. **单一职责**:每个模块只负责一个功能
3. **开闭原则**:对扩展开放,对修改关闭
4. **最小依赖**:核心功能不依赖第三方库
5. **高性能优先**充分利用gnet的事件驱动模型
## 开发规则
### 1. 代码风格
- 遵循 Go 官方代码规范
- 使用 `gofmt` 格式化代码
- 使用 `golint` 检查代码
- 使用有意义的变量和函数名
### 2. 接口设计
- 接口定义在 `pkg/` 目录
- 实现放在 `internal/` 目录
- 接口应该小而专注
- 避免接口污染
### 3. 错误处理
- 使用 `pkg/errors` 包处理错误
- 错误信息应该清晰明确
- 使用错误包装提供上下文
- 避免吞掉错误
### 4. 测试
- 每个功能都应该有对应的测试
- 测试覆盖率目标80%+
- 使用表格驱动测试
- 测试文件命名:`*_test.go`
### 5. 文档
- 公共API必须有文档注释
- 使用 `godoc` 格式
- 示例代码放在 `examples/` 目录
- 设计文档放在 `docs/kb/` 目录
### 6. 性能
- 避免不必要的内存分配
- 使用对象池减少GC压力
- 充分利用gnet的事件驱动模型
- 进行性能测试和基准测试
## 开发流程
### 1. 功能开发
1. 查看需求文档和设计文档
2. 设计接口和实现
3. 编写单元测试
4. 实现功能
5. 运行测试
6. 更新文档
### 2. Bug修复
1. 复现问题
2. 编写测试用例
3. 修复问题
4. 运行测试
5. 更新文档
### 3. 代码审查
1. 检查代码风格
2. 检查接口设计
3. 检查错误处理
4. 检查测试覆盖
5. 检查文档完整性
## 注意事项
1. **向后兼容**修改公共API时需要考虑向后兼容性
2. **性能影响**:修改核心代码时需要考虑性能影响
3. **测试覆盖**:新功能必须有对应的测试
4. **文档更新**:修改功能时同步更新文档
5. **依赖管理**:添加新依赖时需要评估必要性
## 参考资源
- [Go官方文档](https://golang.org/doc/)
- [gnet文档](https://github.com/panjf2000/gnet)
- [项目知识库](docs/kb/README.md)
---
**最后更新**: 2024