Skip to content

Commit 81fe175

Browse files
committed
websocket: provider DefaultProvider
1 parent 0894956 commit 81fe175

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

websocketproxy.go

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,34 @@ import (
1010
"github.com/gorilla/websocket"
1111
)
1212

13+
var (
14+
// DefaultUpgrader specifies the paramaters for upgrading an HTTP connection to
15+
// a WebSocket connection.
16+
DefaultUpgrader = &websocket.Upgrader{
17+
ReadBufferSize: 4096,
18+
WriteBufferSize: 4096,
19+
CheckOrigin: func(r *http.Request) bool {
20+
return true
21+
},
22+
}
23+
24+
// DefaultDialer is a dialer with all fields set to the default zero values.
25+
DefaultDialer = websocket.DefaultDialer
26+
)
27+
1328
// WebsocketProxy is an HTTP Handler that takes an incoming websocket
1429
// connection and proxies it to another server.
1530
type WebsocketProxy struct {
1631
// Backend returns the backend URL which the proxy uses to reverse proxy
1732
// the incoming websocket connection.
1833
Backend func() *url.URL
19-
}
2034

21-
var upgrader = websocket.Upgrader{
22-
ReadBufferSize: 4096,
23-
WriteBufferSize: 4096,
24-
CheckOrigin: func(r *http.Request) bool {
25-
return true
26-
},
35+
// Upgrader specifies the paramaters for upgrading an HTTP connection to a
36+
// WebSocket connection. If nil, DefaultUpgrader is used.
37+
Upgrader *websocket.Upgrader
38+
39+
// Dialer contains options for connecting to WebSocket server.
40+
Dialer *websocket.Dialer
2741
}
2842

2943
// ProxyHandler returns a new http.Handler interface that reverse proxies the
@@ -43,6 +57,11 @@ func NewProxy(target *url.URL) *WebsocketProxy {
4357

4458
// ServerHTTP implements the http.Handler that proxies WebSocket connections.
4559
func (w *WebsocketProxy) ServerHTTP(rw http.ResponseWriter, req *http.Request) {
60+
upgrader := w.Upgrader
61+
if w.Upgrader == nil {
62+
upgrader = DefaultUpgrader
63+
}
64+
4665
connPub, err := upgrader.Upgrade(rw, req, nil)
4766
if err != nil {
4867
log.Println("websocketproxy: couldn't upgrade %s", err)
@@ -52,7 +71,12 @@ func (w *WebsocketProxy) ServerHTTP(rw http.ResponseWriter, req *http.Request) {
5271

5372
backendURL := w.Backend()
5473

55-
connKite, _, err := websocket.DefaultDialer.Dial(backendURL.String(), nil)
74+
dialer := w.Dialer
75+
if w.Dialer == nil {
76+
dialer = DefaultDialer
77+
}
78+
79+
connKite, _, err := dialer.Dial(backendURL.String(), nil)
5680
if err != nil {
5781
log.Println("websocketproxy: couldn't dial to remote backend url %s", err)
5882
return

websocketproxy_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestProxy(t *testing.T) {
3636
go func() {
3737
mux2 := http.NewServeMux()
3838
mux2.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
39-
conn, err := upgrader.Upgrade(w, r, nil)
39+
conn, err := DefaultUpgrader.Upgrade(w, r, nil)
4040
if err != nil {
4141
log.Println(err)
4242
return

0 commit comments

Comments
 (0)