Add optional compression

This commit is contained in:
Owen
2026-03-12 17:49:12 -07:00
parent c2b5ef96a4
commit 3de8dc9fc2

View File

@@ -2,6 +2,7 @@ package websocket
import ( import (
"bytes" "bytes"
"compress/gzip"
"crypto/tls" "crypto/tls"
"crypto/x509" "crypto/x509"
"encoding/json" "encoding/json"
@@ -803,8 +804,7 @@ func (c *Client) readPumpWithDisconnectDetection() {
case <-c.done: case <-c.done:
return return
default: default:
var msg WSMessage messageType, p, err := c.conn.ReadMessage()
err := c.conn.ReadJSON(&msg)
if err != nil { if err != nil {
// Check if we're shutting down or explicitly disconnected before logging error // Check if we're shutting down or explicitly disconnected before logging error
select { select {
@@ -829,6 +829,30 @@ func (c *Client) readPumpWithDisconnectDetection() {
} }
} }
// Decompress binary frames (gzip-compressed JSON)
var data []byte
if messageType == websocket.BinaryMessage {
gr, gzErr := gzip.NewReader(bytes.NewReader(p))
if gzErr != nil {
logger.Error("websocket: failed to create gzip reader: %v", gzErr)
continue
}
data, gzErr = io.ReadAll(gr)
gr.Close()
if gzErr != nil {
logger.Error("websocket: failed to decompress message: %v", gzErr)
continue
}
} else {
data = p
}
var msg WSMessage
if err = json.Unmarshal(data, &msg); err != nil {
logger.Error("websocket: failed to parse message: %v", err)
continue
}
// Update config version from incoming message // Update config version from incoming message
c.setConfigVersion(msg.ConfigVersion) c.setConfigVersion(msg.ConfigVersion)