新增代理服务与边缘节点注册功能

This commit is contained in:
2025-05-13 18:48:17 +08:00
parent 536f36ae02
commit d69a77df38
17 changed files with 573 additions and 203 deletions

View File

@@ -29,24 +29,54 @@ ERR: 除非有必要,否则全部 error 都使用 `errors.Wrap()` 包裹(如
其他级别日志就地打印Info 只用来跟踪关键流程
### proxy.lock 文件格式
| mag_num(1) | name(16) |
|-------------|-----------|
| 魔法数,固定 0x72 | 服务名称uuid |
## 协议
### 建立连接
### 步骤说明
客户端(控制通道):
1. 启动转发服务,尝试注册自身到后端服务,随后持续报告心跳
2. 启动边缘节点后,尝试注册自身到后端服务,随后持续报告心跳
3. 后端服务根据在线转发服务的状态,返回分配给边缘节点的转发服务地址
4. 边缘节点根据配置尝试连接到转发服务(建立控制通道)
5. 连接成功后,控制通道将长期保留,边缘节点定时发送保活心跳,代理服务丢弃所有心跳包
6. 当用户请求代理时,转发服务通过控制通道向边缘节点提供代理目标信息
7. 边缘节点尝试连接到目标地址,同时尝试建立数据通道
8. 当成功建立数据通道后,边缘节点将数据通道标识以及对目标地址的连接结果提供给转发服务
9. 如果连接成功建立,则开始代理流量,如果连接失败,则关闭数据通道
`version(1)` `id_len(1)` `id_buf(n)`
### 协议报文详情
服务端(控制通道):
协议中所有数值都以大端形式传输
`status(1)`
#### 建立控制通道
### 开启代理
客户端:
服务端(控制通道):
| version(1) | name_len(1) | name_buf(n) |
|------------|-------------|-------------|
| 版本号 | 名称长度 | 名称 |
`dst_len(1)` `dst_buf(n)` `tag_len(1)` `tag_buf(n)`
服务端:
客户端(数据通道):
| status(1) |
|-----------|
| 状态,固定为 1 |
`status(1)` `tag_len(1)` `tag_buf(n)`
#### 建立数据通道
服务端:
| tag(16) | dst_len(2) | dst_buf(n) |
|---------|------------|------------|
| 通道标识 | 目标地址长度 | 目标地址 |
客户端:
| tag(16) | status(1) |
|---------|-----------------------|
| 通道标识 | 目标地址连接结果,成功为 1不成功为 0 |