From c12d1c795b728621f7300fdb93fd4832d3b402c3 Mon Sep 17 00:00:00 2001 From: siyuan <17797776520@163.com> Date: Wed, 12 Jun 2024 08:13:42 +0800 Subject: [PATCH] =?UTF-8?q?6=E6=9C=8811=E5=8F=B7=E6=97=A5=E6=8A=A5?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2024-6-11.-.md | 101 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 2024-6-11.-.md diff --git a/2024-6-11.-.md b/2024-6-11.-.md new file mode 100644 index 0000000..62bf3e3 --- /dev/null +++ b/2024-6-11.-.md @@ -0,0 +1,101 @@ +# 完成的任务 + +还是继续观看代码,熟悉项目结构,并对观看的代码进行注释。随着注释的进行慢慢的对项目有了清晰的认知,今天主要是各个项目模块进行梳理,知道了每个模块是干什么的,有什么作用,一下是各个模块的介绍。 + +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,然后在初始化项目的主服务,项目的主服务中包含一下模块: + +1. muxer *mux.Mux 采用的是多路复用器,并没有采用Gin框架,考虑到是否因为项目需要更高的灵活性? + +2. listener frpNet.Listener kcpListener frpNet.Listener websocketListener frpNet.Listener tlsListener frpNet.Listener 这些都是内网穿透工具,方便利用公网Ip访问局域网主机内容 + +3. ctlManager *ControlManager 管理多个Control实例,每个Control实例对应一个客户端 + +4. pxyManager *proxy.ProxyManager 这是代理管理者,管理所有的代理 + +5. httpVhostRouter *vhost.VhostRouters http虚拟隧道管理者 + +6. rc *controller.ResourceController 所有的资源管理者,例如可用端口,系统资源信息,以及网络管理等。 + +7. statsCollector stats.Collector 用于收集服务和代理的状态信息 + +8. tlsConfig *tls.Config Tls 配置 + +9. redisDB *db.RedisDB pubRedis *db.RedisDB Redis的一些配置,包括公共redis + +# 未完成的任务 + + + + + + + + + + + + + + + + + + + + + + + + + + +