为了账号安全,请及时绑定邮箱和手机立即绑定

Golang Websocket 检测文件消息并在超过 1 ws 帧字节时写入

Golang Websocket 检测文件消息并在超过 1 ws 帧字节时写入

Go
吃鸡游戏 2021-12-20 16:29:51
我需要将每张新图片保存在一个文件中,该文件由多个帧通过 websockets 发送。这是我的文件的代码:package mainimport ("fmt""golang.org/x/net/websocket""log""net/http""os""time")var (dirPath stringtest    bytelenFile int)func check(e error) {if e != nil {    panic(e)}}func ChatServer(ws *websocket.Conn) {   defer ws.Close()var test []bytevar payload []bytefor {    err := websocket.Message.Receive(ws, &payload)    if err != nil {        log.Println(err)    }    fmt.Println("Payload: ", len(payload))    test = append(test, payload...)    fmt.Println("Test: ", len(test))    fo, err := os.Create(fmt.Sprintf("./%d.png", time.Now().UnixNano()))    check(err)    _, err = fo.Write(test)    check(err)    fo.Close()} log.Print("DONE")}func main() {if len(os.Args) < 2 {    log.Fatal("Usage: chatExample <dir>")}dirPath = os.Args[1]fmt.Println("Starting... ")http.Handle("/", http.FileServer(http.Dir(dirPath)))http.Handle("/ws", websocket.Handler(ChatServer))err := http.ListenAndServe(":3000", nil)if err != nil {    log.Fatal("ListenAndServe ", err)}}这是我按顺序下载两个文件的结果:所以如果我发送两个文件,而不是三个,我只需要保存两个文件(图像)。另外我需要保存两个不同的文件,我必须以某种方式从 websocket 连接中检测新文件。
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

发送者的片段的消息中的一个到两个帧。因为 x/net/websocket API 公开的是帧而不是消息,所以应用程序会写入三个文件。

使用 x/net/websocket 包无法检测消息边界。改用gorilla/websocket包。


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信