在 go websocket 服务器上获取 json 数据

当我从 js 客户端发送socket.send('{"text":"111"}')并在服务器上获取它时websocket.JSON.Receive(ws, &data),数据保持为空。我使用“golang.org/x/net/websocket”


type (

    Msg struct {

        clientKey string

        text string

    }


    NewClientEvent struct {

        clientKey string

        msgChan chan *Msg

    }


    Item struct {

        text string

    }

)


var (

    clientRequests = make(chan *NewClientEvent, 100)

    clientDisconnects = make(chan string, 100)

    messages = make(chan *Msg, 100)

)


func ChatServer(ws *websocket.Conn) {

    msgChan := make(chan *Msg, 100)

    clientKey := time.Now().String()


    clientRequests <- &NewClientEvent{clientKey, msgChan}

    defer func(){ clientDisconnects <- clientKey}()


    go func(){

        for msg := range msgChan{

            ws.Write([]byte(msg.text))

        }

    }()

    for {

        var data Item

        err := websocket.JSON.Receive(ws, &data)

        if err != nil {

            log.Println("Error: ", err.Error())

            return

        }

        messages <- &Msg{clientKey, data.text}

    }

}

但是,如果我尝试socket.send('"text"')通过以下方式发送并获取它:


var data string

err := websocket.JSON.Receive(ws, &data)

            if err != nil {

                log.Println("Error: ", err.Error())

                return

            }

            messages <- &Msg{clientKey, data}

一切正常。


当年话下
浏览 352回答 1
1回答

慕桂英4014372

您可能需要先定义结构,然后才能JSON.receive在像这样的对象上使用{ "text": "Hi" }type socketData struct {&nbsp; &nbsp; Text string `json:"text"`}然后data := &socketData{}websocket.JSON.receive(ws, &data)log.Println(data.Text) // Hi如果您要发送无法真正为其定义结构的随机数据(尽管这是首选方式),您只需声明一个 interface{}var data map[string]interface{}log.Println(data["text"].(string)) // Hihttp://play.golang.org/p/Jp5qKtiUGw
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go