一、简介

100行代码用Golang实现的一个超级轻量的websocket反向代理,不依赖其他三方库,支持ws、wss代理。



二、安装

三、使用示例

四、测试

启动后监听127.0.0.1:9696地址,使用在线websocket工具连接代理测试请求响应

测试示例


五、代理源码分析

整个代理非常简单,流程步骤:

  1. 首先判断请求是否是websocket请求,不是则响应错误,websocket请求通过请求头Connection、Upgrade两个字段判断。
  2. 劫持请求的连接,拿到net.Conn对象为之后tcp流量转发做准备
  3. 克隆请求,同时修改请求的host、path字段
  4. 代理同目标websocket服务准备握手之前先回调beforeHandshake函数,执行用户自定义方法,修改请求头等
  5. 判断代理协议ws、wss,进行远程拨号连接
  6. 把克隆的请求转换为字节流,转发到目标websocket服务进行握手
  7. 紧接着执行tcp流量透传

至此,整个请求的websocket代理就完成了,代理只在首次握手的时候修改请求头信息接下来只做tcp流量透传功能