登录
首页 >  Golang >  Go问答

gorilla/websocket发送和读取字节数据

来源:stackoverflow

时间:2024-04-13 20:12:36 271浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《gorilla/websocket发送和读取字节数据》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我正在尝试通过 gorilla/websocket 发送图像数据字节,我当前的代码是:

var b bytes.buffer
empty := bufio.newwriter(&b)
png.encode(empty, img)

err = c.writemessage(websocket.textmessage, b.bytes())

我的接收消息代码:

_, message, err := c.ReadMessage()
if err != nil {
    log.Println("read:", err)
    return
}
// log.Printf("recv: %s", message)
ioutil.WriteFile("./nani.png", []byte(message), 0644)

那么保存的文件已损坏,我如何以二进制/字节形式写入/读取消息


解决方案


必须刷新 bufio.writer 才能将任何缓冲数据写入底层写入器(本例中为 bytes.buffer)。如果 bufio.writer 没有刷新,那么一些图像数据可能会丢失,并且图像会出现损坏的情况。

有关刷新写入器的更多信息,请参阅 bufio.Writer documentation

修复方法如下:

var b bytes.buffer
empty := bufio.newwriter(&b)
png.encode(empty, img)
empty.flush()    // <-- add this call

由于写入 byte.buffer 时不需要缓冲数据,因此可以通过消除 bufio.writer 来改进代码:

var b bytes.Buffer
png.Encode(&b, img)

使用 websocket.BinaryMessage 发送二进制消息。有关消息类型的更多信息,请参阅文档的 Data Message 部分。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>