--- 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