При получении сообщения из веб-сокета без вызова «Веб-сокет: закрыть 1011» - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь подписаться на событие от клиента к серверу.Я могу подписаться на событие, используя JavaScript, но когда я использую Golang и Gorilla Websocket library, я получаю

'websocket: close 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 в режиме реального времени.

Это мой маленький Голанг, Скрипт 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 (внутренняя ошибка сервера)

...