一、简介
100行代码用Golang实现的一个超级轻量的websocket反向代理,不依赖其他三方库,支持ws、wss代理。
二、安装
三、使用示例
四、测试
启动后监听127.0.0.1:9696地址,使用在线websocket工具连接代理测试请求响应
测试示例
五、代理源码分析
整个代理非常简单,流程步骤:
- 首先判断请求是否是websocket请求,不是则响应错误,websocket请求通过请求头Connection、Upgrade两个字段判断。
- 劫持请求的连接,拿到net.Conn对象为之后tcp流量转发做准备
- 克隆请求,同时修改请求的host、path字段
- 代理同目标websocket服务准备握手之前先回调beforeHandshake函数,执行用户自定义方法,修改请求头等
- 判断代理协议ws、wss,进行远程拨号连接
- 把克隆的请求转换为字节流,转发到目标websocket服务进行握手
- 紧接着执行tcp流量透传
至此,整个请求的websocket代理就完成了,代理只在首次握手的时候修改请求头信息接下来只做tcp流量透传功能