@@ -10,20 +10,34 @@ import (
10
10
"github.com/gorilla/websocket"
11
11
)
12
12
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
+
13
28
// WebsocketProxy is an HTTP Handler that takes an incoming websocket
14
29
// connection and proxies it to another server.
15
30
type WebsocketProxy struct {
16
31
// Backend returns the backend URL which the proxy uses to reverse proxy
17
32
// the incoming websocket connection.
18
33
Backend func () * url.URL
19
- }
20
34
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
27
41
}
28
42
29
43
// ProxyHandler returns a new http.Handler interface that reverse proxies the
@@ -43,6 +57,11 @@ func NewProxy(target *url.URL) *WebsocketProxy {
43
57
44
58
// ServerHTTP implements the http.Handler that proxies WebSocket connections.
45
59
func (w * WebsocketProxy ) ServerHTTP (rw http.ResponseWriter , req * http.Request ) {
60
+ upgrader := w .Upgrader
61
+ if w .Upgrader == nil {
62
+ upgrader = DefaultUpgrader
63
+ }
64
+
46
65
connPub , err := upgrader .Upgrade (rw , req , nil )
47
66
if err != nil {
48
67
log .Println ("websocketproxy: couldn't upgrade %s" , err )
@@ -52,7 +71,12 @@ func (w *WebsocketProxy) ServerHTTP(rw http.ResponseWriter, req *http.Request) {
52
71
53
72
backendURL := w .Backend ()
54
73
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 )
56
80
if err != nil {
57
81
log .Println ("websocketproxy: couldn't dial to remote backend url %s" , err )
58
82
return
0 commit comments