从websocket收到消息时,不会导致“ Websocket:关闭1011”

时间:2019-06-05 22:09:34

标签: go websocket gorilla

我正在尝试将事件从客户端订阅到服务器。我可以使用JavaScript订阅活动,但是当我使用GolangGorilla Websocket library时,我得到一个

  

“ websocket:关闭1011(内部服务器错误)”

每次我从套接字开始读取数据。

我也尝试过使用/x/websocket库,但是当我尝试从套接字读取时,我最终挂起,并且没有收到'1011'错误。

如果我在浏览器中使用此JavaScript代码,它将起作用:

<html>
  <head>
  </head>
  <body>
    <script>
        var socket = new WebSocket("ws://blehip:blehpport");

        function send(data) {
            socket.send(JSON.stringify(data));
        }

        socket.onopen = function() {
            send({
                action: 'subscribe',
                auth_token: 'Bleh',
                request_id: 'Bleh',
                data: {
                    account_id: 'bleh',
                    binding: "bleh"
                }
            });
        }

        socket.onmessage = function(raw_message) {
            var json_data = JSON.parse(raw_message.data);

            console.log(json_data);
        };

    </script>
  </body>
</html>

我可以实时获取JSON对象流。

这是我的小Golang,Gorilla / Websockets脚本

func main() {
    var server = flag.String("server", "blehIP:BlehPort", "server address")

    var wg sync.WaitGroup
    flag.Parse()

    url := url.URL {
        Scheme: "ws",
        Host: *server,
        Path: "",
    }

    conn, _, err := websocket.DefaultDialer.Dial(url.String(), nil)
    if err != nil {
        log.Fatal("Dial Error: ", err)
    }
    defer conn.Close()

    payload := []byte(`{"action":"subscribe",`+
                       `"auth_token":"` + bleh + `",`+
                       `"request_id":"` + bleh + `",`+
                       `"data": {`+
                                `"account_id":"` + bleh + `",`+
                                `"binding":"` + bleh + `"}`+
                      `}`)

    wg.Add(1)
    go func() {
        defer conn.Close()
        defer wg.Done()

        err = conn.WriteMessage(websocket.TextMessage, payload)
        if err != nil {
            log.Println("Write Error: ", err)
            return
        }

        m := frame{}
        err := conn.ReadJSON(&m)
        if err != nil {
            log.Println("WebScoket closed.", err)
            return
        }


        // msg := string(bytes[:])
        fmt.Printf("%v", m)
    }()
    wg.Wait()

    return
}
  

返回的错误是:WebSocket关闭。 websocket:关闭1011   (内部服务器错误)

0 个答案:

没有答案