代理成功
This commit is contained in:
parent
42193df505
commit
4ec7bc6106
|
@ -164,17 +164,19 @@ func NewBackend(mux *http.ServeMux, httpAddress string, muxPaths ...string) *Bac
|
||||||
if websocket.IsWebSocketUpgrade(r) {
|
if websocket.IsWebSocketUpgrade(r) {
|
||||||
//todo: 建立websocket的代理
|
//todo: 建立websocket的代理
|
||||||
|
|
||||||
target := url.URL{Scheme: "ws", Host: backend.HttpAddress, Path: r.URL.Path}
|
target := url.URL{Scheme: "ws", Host: strings.Split(backend.HttpAddress, "//")[1], Path: r.URL.Path}
|
||||||
|
|
||||||
var transfer = func(src, dest *websocket.Conn) {
|
var transfer = func(src, dest *websocket.Conn) {
|
||||||
for {
|
for {
|
||||||
mType, msg, err := src.ReadMessage()
|
mType, msg, err := src.ReadMessage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
err = dest.WriteMessage(mType, msg)
|
err = dest.WriteMessage(mType, msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -183,22 +185,33 @@ func NewBackend(mux *http.ServeMux, httpAddress string, muxPaths ...string) *Bac
|
||||||
dest.Close()
|
dest.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
proxyConn, _, err := backend.Dialer.Dial(target.String(), nil)
|
header := r.Header.Clone()
|
||||||
|
// log.Println(target.String())
|
||||||
|
header.Del("Sec-Websocket-Extensions")
|
||||||
|
header.Del("Upgrade")
|
||||||
|
header.Del("Sec-Websocket-Key")
|
||||||
|
header.Del("Sec-Websocket-Version")
|
||||||
|
header.Del("Connection")
|
||||||
|
// header.Del("Origin")
|
||||||
|
proxyConn, _, err := backend.Dialer.Dial(target.String(), header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer proxyConn.Close()
|
// defer proxyConn.Close()
|
||||||
|
|
||||||
upgrader := websocket.Upgrader{}
|
upgrader := websocket.Upgrader{
|
||||||
|
CheckOrigin: func(r *http.Request) bool { return true },
|
||||||
|
}
|
||||||
conn, err := upgrader.Upgrade(w, r, nil)
|
conn, err := upgrader.Upgrade(w, r, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
// defer conn.Close()
|
||||||
|
|
||||||
go transfer(proxyConn, conn)
|
go transfer(proxyConn, conn)
|
||||||
go transfer(conn, proxyConn)
|
// go transfer(conn, proxyConn)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析目标URL,包含了查询参数
|
// 解析目标URL,包含了查询参数
|
||||||
|
|
Loading…
Reference in New Issue
Block a user