作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我成功地将帧的形式
文件数据发送到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/
我是一名优秀的程序员,十分优秀!