断线重连服务器端代理。
client <--> goscon <---> server
client和goscon之间使用断线重连协议,goscon把客户端的请求内容转发到server。
无论client因为何种原因主动或被动断开连接,goscon都会维持对应的server连接,使server感受不到client断开。
在goscon维持连接期间,client可以使用断线重连协议,无缝重用之前的连接。
若scp.reuse_time秒没有被重用,goscon断开跟server的连接。
编译时开启sproto扩展,新建连接后自动给后端发送一条sproto消息,宣布客户端的原始ip地址信息。
-
deps: go v1.13+
-
build
# normal compile
go build -mod=vendor
# enable sproto hook & debug
# go build -tags sproto,debug -mod=vendor
- config
配置选项含义,请参考config.go
当 WebSocket 监听置于 Nginx 等反向代理之后时,conn.RemoteAddr() 拿到的是代理机地址。
可通过 websocket_option.real_ip_header 指定从哪个 HTTP 头解析真实客户端 IP,
解析到的地址会透传给上游服务(remote_addr):
websocket_option:
# 为空表示不信任代理头,直接使用 TCP 连接地址(默认)。
# 置于可信反向代理之后时,可设为 X-Forwarded-For 或 X-Real-IP。
# X-Forwarded-For 形如 "client, proxy1, proxy2" 时取第一个 IP。
real_ip_header: "X-Forwarded-For"注意:仅在确信请求经由可信代理时才开启,否则直连客户端可伪造该头。 Nginx 侧需配置透传,例如
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;。
- run
./goscon -logtostderr -v 10 -config config.yaml- test
- 编译测试程序
# normal compile
go build -mod=vendor ./examples/client- 启动服务端
./client -startEchoServer :11248- 测试 tcp
./client -packets 10 -concurrent 100 -rounds 100
- 测试 kcp
./client kcp
- 测试 websocket
./client websocket
可以通过默认开启的管理端口http://localhost:6620进行配置热更新,查看内部状态。
- 热更新配置
- 修改配置文件
- 访问:
http://localhost:6620/reload
- 查看内部状态
- 当前配置:
http://localhost:6620/config - 指标:
http://localhost:6620/metrics - kcp snmp:
http://localhost:6620/kcp/snmp
- 当前配置: