From 01668a54250da283feac4fe16b9669af7842e34a Mon Sep 17 00:00:00 2001 From: Xiaoguang Sun Date: Thu, 15 Sep 2022 12:54:45 +0800 Subject: [PATCH 1/2] Read all payloads from reader at once Reader might return before finish reading all pending bytes. This might cause event handling to fail randomly. Signed-off-by: Xiaoguang Sun --- server/ws_wrapper.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/ws_wrapper.go b/server/ws_wrapper.go index 819c3938..c7bf096c 100644 --- a/server/ws_wrapper.go +++ b/server/ws_wrapper.go @@ -19,7 +19,7 @@ func (wsw *wsWrapper) Write(p []byte) (n int, err error) { func (wsw *wsWrapper) Read(p []byte) (n int, err error) { for { - msgType, reader, err := wsw.Conn.NextReader() + msgType, bytes, err := wsw.Conn.ReadMessage() if err != nil { return 0, err } @@ -28,6 +28,7 @@ func (wsw *wsWrapper) Read(p []byte) (n int, err error) { continue } - return reader.Read(p) + copy(p, bytes) + return len(bytes), err } } From 6522d4b24143653a151a7c33a0f1b8678d4a9e7c Mon Sep 17 00:00:00 2001 From: Xiaoguang Sun Date: Thu, 15 Sep 2022 21:51:37 +0800 Subject: [PATCH 2/2] Return min length of buffers Signed-off-by: Xiaoguang Sun --- server/ws_wrapper.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/server/ws_wrapper.go b/server/ws_wrapper.go index c7bf096c..5be17197 100644 --- a/server/ws_wrapper.go +++ b/server/ws_wrapper.go @@ -17,6 +17,14 @@ func (wsw *wsWrapper) Write(p []byte) (n int, err error) { return writer.Write(p) } +func minInt(a, b int) int { + if a < b { + return a + } else { + return b + } +} + func (wsw *wsWrapper) Read(p []byte) (n int, err error) { for { msgType, bytes, err := wsw.Conn.ReadMessage() @@ -29,6 +37,6 @@ func (wsw *wsWrapper) Read(p []byte) (n int, err error) { } copy(p, bytes) - return len(bytes), err + return minInt(len(p), len(bytes)), err } }