## 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)`