如何在go lang中接收多个帧中的二进制数据

时间:2017-02-01 09:23:16

标签: go websocket

我已成功将一个帧的form中的文件数据发送到websocket。我可以在多个帧中分割文件数据并发送到websocket,但我不知道如何在一个数据数组中接收和合并帧。

我会这样做以获得将文件发送到websocket的进度:

import (
    "golang.org/x/net/websocket"
    "io/ioutil"
    ...
    ...
)
...
...
var data []byte
err = websocket.Message.Receive(ws, &data)
if (err == nil) {
    ioutil.WriteFile("/home/img.jpg", data, 0644)
}

1 个答案:

答案 0 :(得分:0)

通常不需要将数据拆分成多个帧然后合并它们。

如果您想获得进步,可以使用相对较小的缓冲区大小调用func (ws *Conn) Read(msg []byte) (n int, err error)。因此,您不能一次性阅读整个消息。但您可能必须始终在文件内容之前发送文件大小。 (例如,前8个字节始终是文件大小,文件内容从第9个开始。)因此,您可以使用sumOfReceivedSize / fileSize显示每次调用Read后的进度。

如果您想分割文件数据,无论如何:

只需在第一条消息中发送文件大小(作为前8个字节),然后在单独的消息中发送所有其余的块。

将收到多条消息,直到收件人获得足够的数据,即达到文件大小。