This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
完成的任务
还是继续观看代码,熟悉项目结构,并对观看的代码进行注释。随着注释的进行慢慢的对项目有了清晰的认知,今天主要是各个项目模块进行梳理,知道了每个模块是干什么的,有什么作用,一下是各个模块的介绍。
sdserver
├── cmd
│ └── clouds
│ ├── main.go // 程序入口,负责初始化服务
│ └── root.go // 定义Cobra根命令,包括各种命令选项和处理逻辑等。
├── conf
│ ├── clouds-dev.ini // 开发环境配置文件
│ └── clouds-world.ini // 生产环境配置文件
├── grpcapi
│ └── device // 设备管理服务pb文件
├── grpcser
│ ├── cmd // 对应的是设备管理服务grpc接口的具体处理逻辑
│ ├── consts // 定义了一些常量,包括struct等
│ ├── reason // 定义了一些错误码
│ ├── service // 定义了设备管理服务grpc接口
│ └── grpc.go // grpc服务的初始化
├── models
│ ├── config //定义了一些代理配置
│ ├── consts //定义product和代理的常量
│ ├── errors //定义了一些错误码
│ ├── msg //云端消息的处理逻辑
│ ├── nathole //定义了一些nat的处理逻辑
│ ├── plugin //定义了一些代理的处理逻辑
│ └── proto //处理UDP数据包转发操作
├── server
│ ├── controller //定义了一些控制器.例如端口管理,代理管理等
│ ├── db //redis初始化
│ ├── group //定义Http和Tcp的Group
│ ├── platform //监控器,用于定期收集信息并同步到云端
│ ├── ports //端口的处理逻辑
│ ├── proxy //代理的处理逻辑,例如Http代理,Tcp代理等
│ ├── stats // 获取系统信息
│ ├── control.go
│ ├── dashboard.go // 监控指标
│ ├── dashboard_api.go // 监控指标API接口信息
│ ├── grpc.go // grpc监控指标
│ └── serverService.go
└── utils
├── cmap //并发安全的map
├── log //日志处理逻辑
├── metric //监控指标
├── net //网络处理逻辑
├── util //一些工具函数
├── version //版本信息
└── vhost //frp隧道处理
学到了什么?
先了解大体内容,知道了每个模块的作用后,然后从main.go利用深搜方法阅读每个细节。本项目主要是用 Cobra命令进行初始化启动的, 配置文件加载的流程为,用os读取流,然后转化为string,在通过string流转化为相应的内容加载进来,这样做是否过于繁琐?配置文件很多内容需要手动解析,虽然能让代码更加清晰,但具有很多冗余代码,考虑使用viper?
在配置文件初始化之后,就要加载项目的核心文件了,首先加载启动consul,然后在初始化项目的主服务,项目的主服务中包含一下模块:
-
muxer *mux.Mux 采用的是多路复用器,并没有采用Gin框架,考虑到是否因为项目需要更高的灵活性?
-
listener frpNet.Listener kcpListener frpNet.Listener websocketListener frpNet.Listener tlsListener frpNet.Listener 这些都是内网穿透工具,方便利用公网Ip访问局域网主机内容。内网穿透功能:他是一个快速的反向代理工具,能够将Nat或者其他服务暴漏在公网上,frp支持TCP、UDP、HTTP、HTTPS等协议,通过域名将请求转发到内网的服务上。
-
ctlManager *ControlManager 管理多个Control实例,每个Control实例对应一个客户端
-
pxyManager *proxy.ProxyManager 这是代理管理者,管理所有的代理
-
httpVhostRouter *vhost.VhostRouters http虚拟隧道管理者
-
rc *controller.ResourceController 所有的资源管理者,例如可用端口,系统资源信息,以及网络管理等。
-
statsCollector stats.Collector 用于收集服务和代理的状态信息
-
tlsConfig *tls.Config Tls 配置
-
redisDB *db.RedisDB pubRedis *db.RedisDB Redis的一些配置,包括公共redis
未完成的任务
还没对各个模块进行深入的了解,后续将会一点一点吃透代码