如何使用 Golang 仅读取消息的前 X 个字节

问题描述 投票:0回答:1

假设我有一些 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 个字节,而不是整个消息?

go websocket gorilla
1个回答
0
投票

使用 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   
}
© www.soinside.com 2019 - 2024. All rights reserved.