假设我有一些 WS 代码,如下所示:
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
func handleConnections(w http.ResponseWriter, r *http.Request) {
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Fatal(err)
}
defer ws.Close()
for {
messageType, message, err := ws.ReadMessage()
// above works...
// I want to read the first 20 bytes, not the whole message
}
}
我如何读取前 X 个字节,而不是整个消息?
使用 NextReader 获取消息上的 io.Reader。从阅读器读取 20 个字节。
for {
messageType, r, err := ws.NextReader()
if err != nil {
break
}
var prefix [20]byte
n, err := io.ReadFull(r, prefix[:])
if err == io.ErrUnexpectedEOF {
// handle case where message is shorter than len(prefix)
} else if err != nil {
break
}
// do something with prefix
}