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.

6.8 KiB

nnet 库实现总结

已完成功能

1. 核心架构

  • 配置管理 (pkg/config, internal/config)
  • 日志系统 (internal/logger)
  • 错误处理 (pkg/errors)

2. Context系统

  • Context接口 (pkg/context)
  • 请求/响应数据管理
  • 连接信息
  • 键值对存储

3. 连接管理

  • 连接实现 (internal/connection)
    • TCP连接
    • UDP连接
    • WebSocket连接
    • Unix Domain Socket连接
  • 连接管理器 (internal/connection/manager)
    • 连接添加/删除
    • 连接分组
    • 分组广播
    • 非活动连接清理

4. 路由系统

  • 路由接口 (pkg/router)
  • 匹配器实现
    • 字符串匹配器
    • 帧头匹配器
    • 帧数据匹配器
    • 自定义匹配器
  • 路由实现 (internal/router)
    • 路由注册和匹配
    • 路由分组
    • 优先级排序
    • 中间件支持

5. 中间件系统

  • 中间件接口 (pkg/middleware)
  • 内置中间件 (internal/middleware/builtin)
    • 日志中间件
    • 恢复中间件
    • 认证中间件
    • 限流中间件

6. 拦截器系统

  • 拦截器接口 (pkg/interceptor)
  • 内置拦截器 (internal/interceptor/builtin)
    • 验证拦截器
    • 长度拦截器

7. 编解码系统

  • 编解码器接口 (pkg/codec)
  • 编解码器实现 (internal/codec)
    • JSON编解码器
    • 二进制编解码器
    • 编解码器注册表

8. 粘包拆包

  • 拆包器接口 (pkg/unpacker)
  • 拆包器实现 (internal/unpacker)
    • 固定长度拆包器
    • 长度字段拆包器
    • 分隔符拆包器
    • 帧头拆包器

9. Session管理

  • Session接口 (pkg/session)
  • 存储实现 (internal/session/storage)
    • 内存存储

10. 服务器核心

  • TCP服务器 (internal/server)
  • UDP服务器 (internal/server)
  • WebSocket服务器 (internal/server)
  • Unix Domain Socket服务器 (internal/server)
  • TLS服务器 (internal/server)

11. 客户端

  • 客户端接口 (pkg/client)
  • TCP客户端 (internal/client/tcp_client)
  • UDP客户端 (internal/client/udp_client)
  • WebSocket客户端 (internal/client/websocket_client)
  • Unix客户端 (internal/client/unix_client)

12. 协议管理

  • 协议接口 (pkg/protocol)
  • 协议管理器 (internal/protocol/manager)
  • TCP协议 (internal/protocol/tcp)
  • UDP协议 (internal/protocol/udp)
  • WebSocket协议 (internal/protocol/websocket)
  • 版本识别器 (internal/protocol/version)

13. Metrics监控

  • 指标接口 (pkg/metrics)
  • Prometheus导出器 (pkg/metrics/prometheus)

14. 健康检查

  • 健康检查接口 (pkg/health)
  • 健康检查注册
  • 状态聚合

15. 生命周期钩子

  • 生命周期接口 (pkg/lifecycle)
  • 服务器生命周期钩子
  • 连接生命周期钩子

测试

单元测试

  • 路由测试 (test/router_test.go)
  • Context测试 (test/context_test.go)
  • 连接管理器测试 (test/connection_test.go)

编译状态

所有代码已编译通过 基础功能已实现 测试代码可运行

使用示例

TCP服务器示例

package main

import (
    "github.com/noahlann/nnet/pkg/nnet"
)

func main() {
    server, _ := nnet.NewServer(&nnet.Config{
        Addr:     "tcp://:8080",
        Protocol: "tcp",
    })

    server.Router().RegisterString("/hello", func(ctx nnet.Context) error {
        return ctx.WriteString("Hello, nnet!\n")
    })

    server.Start()
}

UDP服务器示例

package main

import (
    "github.com/noahlann/nnet/pkg/nnet"
)

func main() {
    server, _ := nnet.NewUDPServer(&nnet.Config{
        Addr:     "udp://:8080",
        Protocol: "udp",
    })

    server.Router().RegisterString("/hello", func(ctx nnet.Context) error {
        return ctx.WriteString("Hello, UDP!\n")
    })

    server.Start()
}

WebSocket服务器示例

package main

import (
    "github.com/noahlann/nnet/pkg/nnet"
)

func main() {
    server, _ := nnet.NewWebSocketServer(&nnet.Config{
        Addr:     "ws://:8080",
        Protocol: "websocket",
    })

    server.Router().RegisterString("/hello", func(ctx nnet.Context) error {
        return ctx.WriteString("Hello, WebSocket!\n")
    })

    server.Start()
}

客户端示例

package main

import (
    "github.com/noahlann/nnet/pkg/nnet"
    "time"
)

func main() {
    client := nnet.NewClient(&nnet.ClientConfig{
        Addr:     "tcp://localhost:8080",
        Protocol: "tcp",
    })

    client.Connect()
    defer client.Close()

    response, _ := client.Request([]byte("hello"), 5*time.Second)
    println(string(response))
}

项目结构

nnet/
├── cmd/                    # 命令行工具和示例
│   └── server/            # 服务器示例
├── internal/              # 内部实现
│   ├── client/           # 客户端实现
│   ├── codec/            # 编解码器
│   ├── connection/       # 连接管理
│   ├── interceptor/      # 拦截器
│   ├── logger/           # 日志
│   ├── metrics/          # 指标
│   ├── middleware/       # 中间件
│   ├── protocol/         # 协议管理
│   ├── router/           # 路由
│   ├── server/           # 服务器
│   ├── session/          # Session
│   └── unpacker/         # 粘包拆包
├── pkg/                   # 对外暴露的包
│   ├── client/           # 客户端接口
│   ├── codec/            # 编解码器接口
│   ├── config/           # 配置
│   ├── context/          # 上下文
│   ├── errors/           # 错误
│   ├── health/           # 健康检查
│   ├── lifecycle/        # 生命周期
│   ├── metrics/          # 指标接口
│   ├── middleware/       # 中间件接口
│   ├── nnet/             # 主包
│   ├── protocol/         # 协议接口
│   ├── router/           # 路由接口
│   ├── session/          # Session接口
│   └── unpacker/         # 拆包器接口
├── test/                  # 测试代码
└── examples/             # 示例代码

下一步计划

  1. 完善测试覆盖: 编写更多单元测试和集成测试达到80%+覆盖率
  2. 性能优化: 进行性能测试和优化
  3. 文档完善: 完善API文档和使用文档
  4. 更多存储: 实现文件存储和Redis存储Session
  5. 更多编解码器: 实现Protobuf、MessagePack等编解码器

注意事项

  1. 部分功能如TLS需要证书文件才能完整测试
  2. WebSocket需要gorilla/websocket库支持
  3. Unix Domain Socket在Windows上可能不支持
  4. 测试覆盖率目标为80%+,当前已开始编写测试