在 Golang 中使用 WebSocket 发送压缩内容,需要在客户端和服务器端都进行相应的设置。
对于客户端,可以使用 golang.org/x/net/websocket 包提供的 websocket.Dialer 结构体,并设置其 EnableCompression 字段为 true。例如:
ws, err := websocket.Dial("ws://example.com/ws", "", "http://example.com/")
if err != nil {
log.Fatal(err)
}
d := websocket.Dialer{EnableCompression: true}
ws, _, err = d.Dial("ws://example.com/ws", nil)
if err != nil {
log.Fatal(err)
}
对于服务器端,可以使用 github.com/gorilla/websocket 包提供的 Upgrader 结构体,并设置其 EnableCompression 字段为 true。例如:
u := websocket.Upgrader{EnableCompression: true}
conn, err := u.Upgrade(w, r, nil)
if err != nil {
log.Fatal(err)
}
每次发送信息时,WebSocket 库内部会自动进行压缩,并将压缩后的数据通过 WebSocket 连接发送出去。由于压缩率是内部计算的,因此无法从 API 层面获取到。如果需要获取压缩率,可以通过在客户端和服务器端分别记录每次发送前和发送后的数据大小,然后计算两者之间的比例来估算压缩率。