在Golang中,使用gorilla/websocket
进行websocket开发可以很方便地设置支持压缩。下面给出一个示例代码:
package main
import (
"compress/gzip"
"net/http"
"github.com/gorilla/websocket"
)
func main() {
upgrader := websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
return
}
// 设置支持压缩
conn.EnableWriteCompression(true)
go func() {
for {
messageType, message, err := conn.ReadMessage()
if err != nil {
return
}
err = conn.WriteMessage(messageType, message)
if err != nil {
return
}
}
}()
})
err := http.ListenAndServe(":8080", nil)
if err != nil {
return
}
}
在上述代码中,我们通过调用conn.EnableWriteCompression(true)
来启用压缩功能。这里使用的是默认的压缩算法gzip,如果需要使用其他算法,可以通过实现websocket.CompressionMethod
接口并传递给upgrader
来自定义。