Skip to content

Commit 14d189e

Browse files
authored
Merge pull request #14 from seriousben/fix-packet-loss
Fixing packet loss
2 parents 424c31d + b355309 commit 14d189e

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

websocketproxy.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
package websocketproxy
33

44
import (
5-
"io"
65
"log"
76
"net"
87
"net/http"
@@ -162,13 +161,28 @@ func (w *WebsocketProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
162161
defer connPub.Close()
163162

164163
errc := make(chan error, 2)
165-
cp := func(dst io.Writer, src io.Reader) {
166-
_, err := io.Copy(dst, src)
164+
165+
replicateWebsocketConn := func(dst, src *websocket.Conn, dstName, srcName string) {
166+
var err error
167+
for {
168+
msgType, msg, err := src.ReadMessage()
169+
if err != nil {
170+
log.Printf("websocketproxy: error when copying from %s to %s using ReadMessage: %v", srcName, dstName, err)
171+
break
172+
}
173+
err = dst.WriteMessage(msgType, msg)
174+
if err != nil {
175+
log.Printf("websocketproxy: error when copying from %s to %s using WriteMessage: %v", srcName, dstName, err)
176+
break
177+
} else {
178+
log.Printf("websocketproxy: copying from %s to %s completed without error.", srcName, dstName)
179+
}
180+
}
167181
errc <- err
168182
}
169183

170-
// Start our proxy now, everything is ready...
171-
go cp(connBackend.UnderlyingConn(), connPub.UnderlyingConn())
172-
go cp(connPub.UnderlyingConn(), connBackend.UnderlyingConn())
184+
go replicateWebsocketConn(connPub, connBackend, "client", "backend")
185+
go replicateWebsocketConn(connBackend, connPub, "backend", "client")
186+
173187
<-errc
174188
}

0 commit comments

Comments
 (0)