返回

Mongo 代理程序实现-代码实战篇

前端


前言

在上一篇文章中,我们已经搭建好了复制集并完成了抓包。现在,我们正式开始代码实战。

项目目录结构

我们的项目目录结构如下:

.
├── bin/ # 用于存放编译后生成的二进制文件
├── config/ # 用于存放配置文件
├── connect_impl/ # 用于存放连接器实现
│   ├── connect_impl.go # 连接器实现
│   └── connect_impl.h # 连接器实现的头文件
├── core/ # 核心模块
│   ├── config.go # 配置模块
│   ├── dependency_injection.go # 依赖注入模块
│   ├── log.go # 日志模块
│   ├── proxy.go # 代理模块
│   ├── reflection.go # 反射模块
│   └── utils.go # 工具模块
├── db/ # 数据库模块
│   ├── db.go # 数据库模块
│   └── db_impl/ # 数据库实现
│       ├── db_impl.go # 数据库实现
│       └── db_impl.h # 数据库实现的头文件
├── handler/ # 处理器模块
│   ├── handler.go # 处理器模块
│   └── handler_impl/ # 处理器实现
│       ├── handler_impl.go # 处理器实现
│       └── handler_impl.h # 处理器实现的头文件
├── lib/ # 库模块
│   ├── lib.go # 库模块
│   └── lib_impl/ # 库实现
│       ├── lib_impl.go # 库实现
│       └── lib_impl.h # 库实现的头文件
├── main.go # 主函数文件
├── protocol/ # 协议模块
│   ├── mongo/ # mongo 协议模块
│   │   ├── encode.go # mongo 协议编码模块
│   │   ├── mongo.go # mongo 协议模块
│   │   └── mongo_impl.h # mongo 协议实现的头文件
│   └── protocol.go # 协议模块
├── server/ # 服务端模块
│   ├── server.go # 服务端模块
│   └── server_impl/ # 服务端实现
│       ├── server_impl.go # 服务端实现
│       └── server_impl.h # 服务端实现的头文件
├── third_party/ # 第三方库模块
│   └── grpc/ # grpc 第三方库模块
│       ├── grpc.go # grpc 第三方库模块
│       └── grpc_impl.h # grpc 第三方库实现的头文件
├── util/ # 工具模块
│   ├── util.go # 工具模块
│   └── util_impl/ # 工具实现
│       ├── util_impl.go # 工具实现
│       └── util_impl.h # 工具实现的头文件
└── vendor/ # 依赖库模块
    ├── github.com/golang/protobuf/ptypes/ # github.com/golang/protobuf/ptypes/ 依赖库模块
    │   └── any.pb.go # github.com/golang/protobuf/ptypes/ 依赖库模块
    ├── github.com/golang/protobuf/ptypes/timestamp/ # github.com/golang/protobuf/ptypes/timestamp/ 依赖库模块
    │   └── timestamp.pb.go # github.com/golang/protobuf/ptypes/timestamp/ 依赖库模块
    ├── github.com/golang/protobuf/ptypes/wrappers/ # github.com/golang/protobuf/ptypes/wrappers/ 依赖库模块
    │   └── wrappers.pb.go # github.com/golang/protobuf/ptypes/wrappers/ 依赖库模块
    ├── github.com/grpc-ecosystem/go-grpc-middleware/interceptor/ # github.com/grpc-ecosystem/go-grpc-middleware/interceptor/ 依赖库模块
    │   └── interceptor.pb.go # github.com/grpc-ecosystem/go-grpc-middleware/interceptor/ 依赖库模块
    ├── github.com/grpc-ecosystem/go-grpc-middleware/logging/ # github.com/grpc-ecosystem/go-grpc-middleware/logging/ 依赖库模块
    │   └── logging.pb.go # github.com/grpc-ecosystem/go-grpc-middleware/logging/ 依赖库模块
    ├── github.com/grpc-ecosystem/go-grpc-middleware/recovery/ # github.com/grpc-ecosystem/go-grpc-middleware/recovery/ 依赖库模块
    │   └── recovery.pb.go # github.com/grpc-ecosystem/go-grpc-middleware/recovery/ 依赖库模块
    ├── github.com/grpc-ecosystem/go-grpc-middleware/tags/ # github.com/grpc-ecosystem/go-grpc-middleware/tags/ 依赖库模块
    │   └── tags.pb.go # github.com/grpc-ecosystem/go-grpc-middleware/tags/ 依赖库模块
    ├── github.com/grpc-ecosystem/grpc-gateway/runtime/ # github.com/grpc-ecosystem/grpc-gateway/runtime/ 依赖库模块
    │   └── runtime.pb.go # github.com/grpc-ecosystem/grpc-gateway/runtime/ 依赖库模块
    ├── github.com/grpc-ecosystem/grpc-gateway/utilities/ # github.com/grpc-ecosystem/grpc-gateway/utilities/ 依赖库模块
    │   └── utilities.pb.go # github.com/grpc-ecosystem/grpc-gateway/utilities/ 依赖库模块
    ├── github.com/mailru/easyjson/jlexer/ # github.com/mailru/easyjson/jlexer/ 依赖库模块
    │   └── jlexer.pb.go # github.com/mailru/easyjson/jlexer/ 依赖库模块
    ├── github.com/mailru/easyjson/jwriter/ # github.com/mailru/easyjson/jwriter/ 依赖库模块
    │   └── jwriter.pb.go # github.com/mailru/easyjson/jwriter/ 依赖库模块
    ├── github.com/pkg/errors/ # github.com/pkg/errors/ 依赖库模块
    │   └── errors.pb.go # github.com/pkg/errors/ 依赖库模块
    ├── go.mongodb.org/mongo-driver/bson/ # go.mongodb.org/mongo-driver/bson/ 依赖库模块
    │   ├── bson.pb.go # go.mongodb.org/mongo-driver/bson/ 依赖库模块
    │   ├── bson_codec.pb.go # go.mongodb.org/mongo-driver/bson/ 依赖库模块
    │   ├── bson_options.pb.go # go.mongodb.org/mongo-driver/bson/ 依赖库模块
    │   └── bson_pe.pb.go # go.mongodb.org/mongo-driver/bson/ 依赖库模块
    ├── go.mongodb.org/mongo-driver/core/ # go.mongodb.org/mongo-driver/core/ 依赖库模块
    │   ├── commands.pb.go # go.mongodb.org/mongo-driver/core/ 依赖库模块
    │   ├── connection.pb.go # go.mongodb.org/mongo-driver/core/ 依赖库模块
    │   ├── core.pb.go # go.mongodb.org/mongo-driver/core/ 依赖库模块
    │   ├── description.pb.go # go.mongodb.org/mongo-driver/core/ 依赖库模块
    │   ├── message.pb.go # go.mongodb.org/mongo-driver/core/ 依赖库模块
    │   └── server_api.pb.go # go.mongodb.org/mongo-driver/core/ 依赖库模块
    ├── go.mongodb.org/mongo-driver/mongo/ # go.mongodb.org/mongo-driver/mongo/ 依赖库模块
    │   ├── aggregates.pb.go # go.mongodb.org/mongo-driver/mongo/ 依赖库模块
    │   ├── change_stream.pb.go # go.mongodb.org/mongo-driver/mongo/ 依赖库模块
    │   ├── client_options.pb.go # go.mongodb.org/mongo-driver/mongo/ 依赖库模块
    │   ├── command_monitor.pb.go # go.mongodb.org/mongo-