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

2.1 KiB
Raw Blame History

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)