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

我需要将每张新图片保存在一个文件中,该文件由多个帧通过 websockets 发送。这是我的文件的代码:


package main


import (

"fmt"

"golang.org/x/net/websocket"

"log"

"net/http"

"os"

"time"

)


var (

dirPath string

test    byte

lenFile int

)


func check(e error) {

if e != nil {

    panic(e)

}

}


func ChatServer(ws *websocket.Conn) {   

defer ws.Close()

var test []byte

var payload []byte

for {

    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)

}

}

这是我按顺序下载两个文件的结果:

http://img1.mukewang.com/61c03f1e00012c7307430225.jpg

http://img.mukewang.com/61c03f2700012b8311920838.jpg

http://img3.mukewang.com/61c03f3000010a4f06160351.jpg

所以如果我发送两个文件,而不是三个,我只需要保存两个文件(图像)。另外我需要保存两个不同的文件,我必须以某种方式从 websocket 连接中检测新文件。

吃鸡游戏
浏览 188回答 1
1回答

潇潇雨雨

发送者的片段的消息中的一个到两个帧。因为 x/net/websocket&nbsp;API 公开的是帧而不是消息,所以应用程序会写入三个文件。使用 x/net/websocket 包无法检测消息边界。改用gorilla/websocket包。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go