69 lines
1.9 KiB
Markdown
69 lines
1.9 KiB
Markdown
## todo
|
||
|
||
客户端断开后端口未释放问题
|
||
|
||
ProxyConn 直接实现 Conn 相同的接口,不再取出 Conn 使用
|
||
|
||
配置退出等待时间
|
||
|
||
log 控制台颜色,输出错误堆栈
|
||
|
||
读取 conn 时加上超时机制
|
||
|
||
代理节点超时控制
|
||
|
||
网关根据代理节点对目标服务连接的反馈,决定向用户返回的 socks 响应
|
||
|
||
数据通道池化
|
||
|
||
在控制通道直接传输目标地址,客户端可以同时开始数据通道和目标地址的连接建立
|
||
|
||
### 长期
|
||
|
||
退出顺序好像有问题,需要检查
|
||
|
||
实现一个 socks context 以在子组件中获取 socks 相关信息
|
||
|
||
代理端口支持混合端口转发
|
||
|
||
数据通道支持 tcp 多路复用(分离逻辑流)
|
||
|
||
👆 进阶黑魔法 multipath tcp + 多路复用
|
||
|
||
考虑一下连接安全性
|
||
|
||
内部接口 rtt 是否还有优化空间(当前30-300ms,根据内容大小增长)
|
||
|
||
### 代码清理
|
||
|
||
检查 slog 级别:
|
||
|
||
ERR: 除非有必要,否则全部 error 都使用 `errors.Wrap()` 包裹(如果下游有返回 err),并附带本层业务信息,return 到上层统一打印
|
||
|
||
其他级别日志就地打印,Info 只用来跟踪关键流程
|
||
|
||
## 开发相关
|
||
|
||
### 环境变量
|
||
|
||
> 环境变量只记录在程序中用到的变量
|
||
>
|
||
> **构建期变量**,比如 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)
|