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

标签 go websocket

我成功地将帧的形式文件数据发送到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)
}

最佳答案

通常应该不需要将数据拆分成多帧再合并。

如果你想取得进展,也许可以用相对较小的缓冲区大小调用 func (ws *Conn) Read(msg []byte) (n int, err error)。所以你不会一口气读完整封邮件。但是您可能必须始终在文件内容之前发送文件大小。 (例如,前 8 个字节始终是文件大小,文件内容从第 9 个字节开始。)所以您可以使用 sumOfReceivedSize/fileSize 来显示每次调用 Read 后的进度.


如果无论如何都想拆分文件数据:

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

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

关于go - 如何在go lang中接收多帧二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41976053/

相关文章:

node.js - 如何在socket.io中检测客户端socket服务器授权失败?

javascript - 从 javascript 连接到 C# 服务器

scala - mapMaterializedValue 对 Source.actorRef 不执行任何操作

go - 在没有验证的情况下解码 JWT 并找到范围

戈朗 : concatination array of int

go - 将 float64 转换为字节数组

ruby-on-rails - Actioncable 连接的用户列表

javascript - WebSocket 的 Webaudio 播放出现中断

testing - 您如何构建用于在项目模块内进行测试的导入?

go - x/手机 : Launch a android application with given package name [String] in go