Files
proxy/README.md
2025-03-08 11:18:47 +08:00

89 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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.
## todo
找一个其他方式即时关闭未成功建立数据通道的连接
排查下套接字重复的问题
鉴权时判断授权的协议
建立通道时,发送的 dst 和 tag 等信息,可以用字节表示而非 string提高效率
建立数据通道失败后,根据用户所选协议返回对应失败响应
测试跳过认证时的最大 qps需要注意单机连接数上限会导致连接失败
数据通道池化
可配配置环境变量
- 退出等待时间
- 数据通道连接超时等待时间
- 目标地址连接超时等待时间
### 长期
协程池化
需要测试,考虑是否切换到 gnet
数据通道支持 tcp 多路复用(分离逻辑流)
👆 进阶黑魔法 multipath tcp + 多路复用
考虑一下连接安全性
## 开发相关
### 环境变量
> 环境变量只记录在程序中用到的变量
>
> **构建期变量**,比如 docker-compose 中的变量,以及其他配套服务的环境变量,直接写死
新增环境变量时,需要确保两个位置正确传递了变量
1. 在对应端的 .env.sample 文件中添加变量
2. 复制到 .env 文件中,并修改变量值
3. 在 docker-compose.yml 和程序中使用变量
### 更新测试环境
1. 构建项目
2. 使用测试配置 `.env.test` 远程启动 docker
### 转发服务结束时资源清理
1. 关闭接听端口防止新连接接入user, data, ctrl
2. 通知并等待所有正在运行的 conn 处理协程全部关闭user, data, ctrl
3. 结束所有保存且未使用的 conn 连接user, ctrl
### 代码清理
检查 slog 级别:
ERR: 除非有必要,否则全部 error 都使用 `errors.Wrap()` 包裹(如果下游有返回 err并附带本层业务信息return 到上层统一打印
其他级别日志就地打印Info 只用来跟踪关键流程
## 协议
### 建立连接
客户端(控制通道):
`version(1)` `id_len(1)` `id_buf(n)`
服务端(控制通道):
`status(1)`
### 开启代理
服务端(控制通道):
`dst_len(1)` `dst_buf(n)` `tag_len(1)` `tag_buf(n)`
客户端(数据通道):
`status(1)` `tag_len(1)` `tag_buf(n)`