2025-02-19 14:23:58 +08:00
|
|
|
|
## todo
|
|
|
|
|
|
|
2025-03-08 11:40:52 +08:00
|
|
|
|
可配置 logger,不直接使用 slog
|
|
|
|
|
|
|
|
|
|
|
|
授权测试,两种协议,三种认证方式
|
|
|
|
|
|
|
|
|
|
|
|
连接计时数据清理,避免堆泄露
|
|
|
|
|
|
|
2025-03-08 10:59:31 +08:00
|
|
|
|
找一个其他方式即时关闭未成功建立数据通道的连接
|
|
|
|
|
|
|
|
|
|
|
|
排查下套接字重复的问题
|
|
|
|
|
|
|
2025-03-07 15:50:57 +08:00
|
|
|
|
建立通道时,发送的 dst 和 tag 等信息,可以用字节表示而非 string,提高效率
|
|
|
|
|
|
|
|
|
|
|
|
建立数据通道失败后,根据用户所选协议返回对应失败响应
|
2025-03-06 18:08:57 +08:00
|
|
|
|
|
2025-02-27 23:11:36 +08:00
|
|
|
|
|
2025-03-07 15:50:57 +08:00
|
|
|
|
可配配置环境变量
|
2025-02-25 00:46:16 +08:00
|
|
|
|
|
2025-03-08 11:40:52 +08:00
|
|
|
|
- 输出级别
|
2025-03-07 15:50:57 +08:00
|
|
|
|
- 退出等待时间
|
|
|
|
|
|
- 数据通道连接超时等待时间
|
|
|
|
|
|
- 目标地址连接超时等待时间
|
2025-03-05 14:14:11 +08:00
|
|
|
|
|
2025-02-19 14:23:58 +08:00
|
|
|
|
### 长期
|
|
|
|
|
|
|
2025-03-07 15:50:57 +08:00
|
|
|
|
协程池化
|
2025-03-05 14:14:11 +08:00
|
|
|
|
|
2025-03-08 11:40:52 +08:00
|
|
|
|
数据通道池化
|
2025-02-28 09:45:31 +08:00
|
|
|
|
|
2025-02-26 13:56:56 +08:00
|
|
|
|
数据通道支持 tcp 多路复用(分离逻辑流)
|
|
|
|
|
|
|
|
|
|
|
|
👆 进阶黑魔法 multipath tcp + 多路复用
|
|
|
|
|
|
|
2025-03-08 11:40:52 +08:00
|
|
|
|
切换到 gnet
|
2025-02-19 14:23:58 +08:00
|
|
|
|
|
|
|
|
|
|
## 开发相关
|
|
|
|
|
|
|
|
|
|
|
|
### 环境变量
|
|
|
|
|
|
|
2025-02-25 09:39:39 +08:00
|
|
|
|
> 环境变量只记录在程序中用到的变量
|
|
|
|
|
|
>
|
|
|
|
|
|
> **构建期变量**,比如 docker-compose 中的变量,以及其他配套服务的环境变量,直接写死
|
|
|
|
|
|
|
2025-02-19 14:23:58 +08:00
|
|
|
|
新增环境变量时,需要确保两个位置正确传递了变量
|
|
|
|
|
|
|
2025-02-25 09:39:39 +08:00
|
|
|
|
1. 在对应端的 .env.sample 文件中添加变量
|
|
|
|
|
|
2. 复制到 .env 文件中,并修改变量值
|
|
|
|
|
|
3. 在 docker-compose.yml 和程序中使用变量
|
2025-02-19 14:23:58 +08:00
|
|
|
|
|
|
|
|
|
|
### 更新测试环境
|
|
|
|
|
|
|
|
|
|
|
|
1. 构建项目
|
2025-02-25 14:48:50 +08:00
|
|
|
|
2. 使用测试配置 `.env.test` 远程启动 docker
|
2025-02-19 14:23:58 +08:00
|
|
|
|
|
2025-03-01 17:08:56 +08:00
|
|
|
|
### 转发服务结束时资源清理
|
|
|
|
|
|
|
|
|
|
|
|
1. 关闭接听端口,防止新连接接入(user, data, ctrl)
|
|
|
|
|
|
2. 通知并等待所有正在运行的 conn 处理协程全部关闭(user, data, ctrl)
|
|
|
|
|
|
3. 结束所有保存且未使用的 conn 连接(user, ctrl)
|
2025-03-07 15:50:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 代码清理
|
|
|
|
|
|
|
|
|
|
|
|
检查 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)`
|